我正在读一本关于域驱动设计的书。有一章关于域事件。作者指出,如果在ASP.Net应用程序中使用带有[ThreadStatic]属性的回调集合并引用此博客文章,则有理由担心:http://www.hanselman.com/blog/ATaleOfTwoTechniquesTheThreadStaticAttributeAndSystemWebHttpContextCurrentItems.aspx
我在这个博客上阅读了解释。但我不明白究竟是什么问题。 有人使用这种域名事件方法并可以分享他的经验吗?
以下是域事件类的代码(来自Udi Dahan):
public static class DomainEvents
{
[ThreadStatic]
private static List<Delegate> _actions;
private static List<Delegate> Actions
{
get
{
if (_actions == null)
{
_actions = new List<Delegate>();
}
return _actions;
}
}
public static IDisposable Register<T>(Action<T> callback)
{
Actions.Add(callback);
return new DomainEventRegistrationRemover(() => Actions.Remove(callback));
}
public static void Raise<T>(T eventArgs)
{
foreach (Delegate action in Actions)
{
Action<T> typedAction = action as Action<T>;
if (typedAction != null)
{
typedAction(eventArgs);
}
}
}
private sealed class DomainEventRegistrationRemover : IDisposable
{
private readonly Action _callOnDispose;
public DomainEventRegistrationRemover(Action toCall)
{
_callOnDispose = toCall;
}
public void Dispose()
{
_callOnDispose();
}
}
}
答案 0 :(得分:0)
以下是相关问题:
ThreadStaticAttribute in ASP.NET
我已经放弃了这种类型的域事件静态实现,并且更喜欢域从命令方法返回事件。我发现更容易使用和推理。这是另一个相关的问题:
Is it safe to publish Domain Event before persisting the Aggregate?