Udi Dahan DomainEvent类如下所示:
namespace Udi.DomainEvent
{
public static class DomainEvent
{
private static List<Delegate> Actions;
public static IDisposable Register<T>(Action<T> callback)
{
Actions.Add(callback);
return new DomainEventRegistrationRemover(() => Actions.Remove(callback));
}
private sealed class DomainEventRegistrationRemover : IDisposable
{
private readonly Action _callOnDispose;
public DomainEventRegistrationRemover(Action callTo)
{
_callOnDispose = callTo;
}
public void Dispose()
{
_callOnDispose();
}
}
}
}我不明白在调用Actions委托时Actions<T>.Remove()函数是如何调用的?为什么Register<T>()方法返回IDisposable类型?
发布于 2015-05-30 14:01:53
操作列表是为了让DomainEvent类知道要为每个注册执行什么回调。返回IDisposable,以便用户可以通过处理该值来注销其回调。
我怀疑这样做的原因是为了让您可以注册和注销匿名委托,否则您将不得不保留对操作的引用,并在注销时传递它。
用法:
var registration = domainEvent.Register(() => Console.WriteLine("I am registered"));
// do stuff
// domainEvent may call callback while we are doing work.
// unregister, domainEvent can't call callback anymore.
registration.Dispose();https://stackoverflow.com/questions/30542659
复制相似问题