Je suis en train de lire un livre sur la conception pilotée par domaine. Il y a un chapitre sur les événements de domaine. L'auteur indique qu'il existe un motif de préoccupation si vous utilisez une collection de rappel avec l'attribut [ThreadStatic] dans l'application ASP.Net et des références à cet article de blog: http://www.hanselman.com/blog/ATaleOfTwoTechniquesTheThreadStaticAttributeAndSystemWebHttpContextCurrentItems.aspxRappel d'événements de domaine avec l'attribut ThreadStatic dans ASP.Net
J'ai lu l'explication sur ce blog. Mais je ne comprends pas exactement ce que l'inquiétude est. Est-ce que quelqu'un utilise cette approche de l'événement de domaine et peut partager son expérience?
Voici le code de classe d'événements de domaine (il est de 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();
}
}
}