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<T>.Remove()
委托时,我不明白Actions
函数调用的方式是什么?
为什么Register<T>()
方法返回IDisposable
类型?
答案 0 :(得分:1)
操作列表是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();