2016-10-18 5 views
0

私はクラスのデフォルトタイプを定義するレジストリを追加するコンテナを持っています。Structure Mapでのオーバーライド登録を設定する方法4.4

TestRegistry : Registry{ 
    For<Foo>.Use<Foo>(); 
} 

このレジストリは、アプリケーションの初期化中にWebサービスの開始時に追加されます。アプリケーションに使用するすべてのレジストリを追加した直後に、Fooクラスの登録をオーバーライドする必要があります。だから、私は私のコンテナ

var fromContainer = Container.Instance.GetInstance<Foo>(); 

からこのインスタンスを取得するために行くとき

Container.Instance.Configure(x => 
{ 
    x.AddRegistry<TestRegistry>(); 
    var fooInstance = new Foo(); 
    x.For<Foo>.Use(fooInstance); 
} 

私はすぐに戻ってnullを取得しています。すべてのインスタンスを取得する場合:

var fromContainer = Container.Instance.GetAllInstances<Foo>(); 

私は2つの結果を返します。登録ごとに1つ。意味あり。

Container.Instance.Configure(x => 
{ 
    x.AddRegistry<TestRegistry>(); 
    var fooInstance = new Foo(); 
    x.For<Foo>.ClearAll().Use(fooInstance); 
} 
var fromContainer = Container.Instance.GetInstance<Foo>(); 

これはまだnullを返します。私は第2の登録時に登録を解除しようとする場合は、

。私はここで何かを逃しているようだ。私はFooのすべての登録をクリアし、最後に登録したインスタンスを使用すると思います。

ご協力いただければ幸いです。前もって感謝します!

答えて

0

私は答えを見つけました。 Container.Instanceには、設定方法が完了するまで実際に定義が含まれていないようです。つまり、実装をオーバーライドするには、オーバーライドでContainer.Instance.Configure()をもう一度呼び出す必要があります。私はこれをやった後、期待どおりに働き始めました。

関連する問題