-1

歴史的な理由から、アプリケーションには単一の静的 StructureMapContainerがあり、あらゆる場所のすべての IoC/DI に使用されます。このコンテナーが適切に設定されていることを確認するテストはかなりありますが、テストが互いに干渉しないようにすることはますます難しくなっています。これを軽減するために、いくつかの(静的ではない)コンテナに分割し始めたいと思います。下位互換性を維持するには、このコンテナーで構成されたものを引き続きメイン コンテナーから使用できる必要があります。

この方法でいくつかの基本型のみを処理するシステムの小さな部分の概念実証を実装しました。

_pocContainer = new Container(/* setup code */);
MainContainer.Configure(c => c.For<C>.Use(ctx => _pocContainer.GetInstance<C>());

Cこれは機能し、静的コンテナーから のインスタンスを要求すると、 _pocContainer. ただし、StructureMap を設計する際に、これが通常の使用例と見なされたものではないことは確かです。これによりパフォーマンスが低下するか、またはその他の悪影響がありますか? これを行うためのより良い方法はありますか?

4

1 に答える 1

1

可能なアプローチの 1 つは、登録を分割し、Registries各レジストリを個別にテストすることです。

public class FooRegistry : Registry {
    public FooRegistry() {
        For<IFoo>().Use<Foo>();
    }
}

その後、テストでレジストリを明示的に使用できます

var container = new Container(new FooRegistry());

ただし、コンポジションルートですべてのレジストリを自動的にスキャンする

var container = new Container(x => {
    x.Scan(scanner =>
    {
        scanner.TheCallingAssembly()
       scanner.LookForRegistries();
    });
});
于 2013-08-26T08:09:35.147 に答える