2017-09-03 6 views
0

ドメイン駆動型設計に関する書籍を読んでいます。ドメインイベントについての章があります。著者はASP.Netアプリケーションの[ThreadStatic]属性を持つコールバックコレクションを使用し、このブログの記事を参照すると問題が生じることを示しています。http://www.hanselman.com/blog/ATaleOfTwoTechniquesTheThreadStaticAttributeAndSystemWebHttpContextCurrentItems.aspxドメインイベントASP.NetのThreadStatic属性を使用したコールバック

私はこのブログで説明を読んでいます。しかし、私は心配が何であるか正確に理解していません。 誰もこのドメインイベントのアプローチを使用して、彼の経験を共有できますか?ここで

は、ドメインイベントクラスのコードは、(それがあるUdi漢からである)である:ここでは

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(); 
      } 
     } 
    } 

答えて

関連する問題