2

独自の依存性注入コンテナーを使用してNServiceBus 5と、選択したコンテナーであるSimpleInjectorに慣れようとしています。

NServiceBusに注入するように指示する方法があります

IBus バス {get;set;}

NServiceBusControllerActivatorカスタムandを使用して、プロパティをすべての ASP.NET MVC ApiControllers (または他の場所) に追加しますNServiceBusDependencyResolverAdapter

ただし、SimpleInjector を使用したいのですが、MVC アプリケーションはありません。Bus をコントローラーに直接挿入したくありません。コントローラは軽量である必要があるため、ロジックは「サービス」内にあり、次に を呼び出しますBus.Send(message)

BusSimpleInjector を使用してプロパティを注入するにはどうすればよいでしょうか? 人々がNServiceBus で SIMpleInjector を構成しようと したことは知っていますが、それらは一緒に動作しません。

4

1 に答える 1

0

ここで読むことができるように、私と Kijana は Simple Injector と NServiceBus を統合するための完全なソリューションを考え出そうとしました。ただし、Kijana が説明する (コレクションへの追加に関する) 問題は、長い間既に解決されています。ただし、コンテナを NServiceBus に統合することには他にも多くの問題があります。NServiceBus は適合するコンテナ アンチパターンを実装しているためです。

これが正しい方向に役立つかどうかはわかりませんが、Simple Injector に別の場所で作成されたインスタンスを構築させることができます。これにより、ここここIBusで読むことができるように、プロパティに を注入できます。簡単に言えば、Simple Injector を構成して、次のようにプロパティ インジェクションを行うことができます。

class PropertySelectionBehavior<TAttribute> : IPropertySelectionBehavior
    where TAttribute : Attribute {
    public bool SelectProperty(Type type, PropertyInfo prop) {
        return prop.GetCustomAttributes(typeof(TAttribute)).Any();
    }
}

// Usage:
var container = new Container();
container.Options.PropertySelectionBehavior =
    new PropertySelectionBehavior<ImportAttribute>();

container.RegisterSingle<IBus>(bus);

そして、次のコードを使用してビルドアップすることができます:

public static BuildUp(object instance) {
    InstanceProducer producer =
        container.GetRegistration(instance.GetType(), throwOnFailure: true);
    Registration registration = producer.Registration;
    registration.InitializeInstance(instance);
}
于 2014-10-20T14:18:09.040 に答える