私はMVCプロジェクトでNinjectを使用しており、UdiDahanのパターンhttp://www.udidahan.com/2009/06/14/domain-events-salvation/に従ってドメインイベントを実装しようとしています。
以下の抜粋では、「コンテナ」は、発生した特定のタイプのイベントのすべてのイベントハンドラーを解決するために使用されます。
私の質問(そして基本的なものが欠けている場合はお詫びします)は、Ninjectでこれを行う方法ですか?言い換えると:
「コンテナ」はこの静的クラスでどのように設定されますか?
コンテナ(カーネル?)を取得したら、すべてのイベントハンドラーを解決するためのNinject構文はどうなりますか(サービスモジュールに事前に登録する必要があると想定しています)?
コンストラクターインジェクションのみを使用する必要があり、そこからすべてが再帰的に解決され、Ninjectカーネルへのアクセスはノーノーであるという投稿を読み続けています。したがって、これを行う方法についてのアドバイスは大歓迎です。
記事からの抜粋
public static class DomainEvents
{
[ThreadStatic] //so that each thread has its own callbacks
private static List<Delegate> actions;
public static IContainer Container { get; set; } //as before
//Registers a callback for the given domain event
public static void Register<T>(Action<T> callback) where T : IDomainEvent
{
if (actions == null)
actions = new List<Delegate>();
actions.Add(callback);
}
//Clears callbacks passed to Register on the current thread
public static void ClearCallbacks ()
{
actions = null;
}
//Raises the given domain event
public static void Raise<T>(T args) where T : IDomainEvent
{
if (Container != null)
foreach(var handler in Container.ResolveAll<Handles<T>>())
handler.Handle(args);
if (actions != null)
foreach (var action in actions)
if (action is Action<T>)
((Action<T>)action)(args);
}
}