5

ドメイン イベント パターンを使用し、IoC コンテナーに依存して、特定の種類のイベントのハンドラーを見つけます。

public interface IHandleEvent<TEvent> where TEvent : IEvent
{
    void Handle(TEvent evnt);
}

StructureMap を使用すると、上記のインターフェースを実装するすべてのタイプを次のようにスキャンして登録できます。

Scan(cfg =>
{
    cfg.TheCallingAssembly();
    cfg.ConnectImplementationsToTypesClosing(typeof(IHandleEvent<>));
});

Ninjectに相当するものはありますか?

現在、次のように各ハンドラーを個別にバインドする必要があります。

kernel.Bind<IHandleEvent<SomeEvent>>().To<EventHandler1>();
kernel.Bind<IHandleEvent<SomeEvent>>().To<EventHandler2>();
kernel.Bind<IHandleEvent<SomeOtherEvent>>().To<EventHandler3>();
4

2 に答える 2

7

Ninject Conventions Extensions パッケージは、私が必要としていたことを正確に実行してくれました。作業コードは以下のとおりです。

kernel.Bind(x => x
    .FromThisAssembly()
    .SelectAllClasses().InheritedFrom(typeof(IHandleEvent<>))
    .BindSingleInterface());
于 2012-12-19T13:46:50.530 に答える
5

Ninject Conventions Extensionsを試してください。Ninject の慣例による構成を提供します。wiki には非常に優れたドキュメントがあります。

于 2012-12-18T20:47:43.500 に答える