0

MSDN によると、メソッドを使用してオブジェクトの既存のインスタンスを登録した場合、RegisterInstanceResolve または ResolveAll へのすべての呼び出しに対して、または依存関係メカニズムによってインスタンスが他のクラスに挿入されるときに、コンテナーは同じインスタンスを返します。

dataServiceレイヤー用のプロジェクトを作成して使用しました

container.RegisterInstance<IQuoteSource>(new IBQuoteSource());

IQuoteSource必要なときはいつでも、アプリケーションの存続期間中にインスタンスが 1 つだけ作成されることを期待しています。しかし、コンストラクターでインターフェイスを使用すると、別のプロジェクト アセンブリで別のものIBQuoteSourceが作成されます (コンストラクターがIBQuoteSource再度呼び出されることがわかります) では、アプリケーション全体でインターフェイスの 1 つの実装を共有する方法は?

public ClickViewModel( IQuoteSource quoteSource)
{
    this.quoteSource = quoteSource;
    ComboItems = new List<string>() { "GTC Order", "Day Order" };
    SelectedComBoItem = ComboItems[1];
}
4

1 に答える 1

0

doco を誤って解釈したと思います。RegisterInstance を使用すると、同じ具体的なインスタンスではなく、登録されたインターフェイスの同じ実装が返されることを意味します。

必要なものを取得するには、 ContainerControlledLifetimeManagerを使用する必要があります。

container.RegisterInstance<IQuoteSource>( new IBQuoteSource()
                                        , new ContainerControlledLifetimeManager()
                                        ); 

(注: テストされていないコード行!) これにより、コンテナーでシングルトン パターンが効果的に使用されます。作成された最初のインスタンスは、そのインターフェイスが解決されるたびに使用されます。

また、ちょっとつまらないことに-名前を変更することをお勧めしますIBQuoteSource-それは実際のクラスであり、インターフェースではないため、理想的にIはクラス名の前に大文字を付けるべきではありません。

于 2014-12-20T23:43:26.007 に答える