udi dahan domainevents类是如何工作的
本文关键字:工作 何工作 dahan domainevents udi | 更新日期: 2023-09-27 17:51:14
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
类型?
动作列表是这样的,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();