2011-01-17 6 views
1

インスタンスを解決しようとすると予期しない結果に遭遇しました。おそらくコードで説明する方が良いでしょう。StructureMapは、プロファイルされたネストされたコンテナを設定します。

public MyRegistry : Registry { 
    public MyRegistry() { 
     this.For<IServiceA>.Use<ServiceA>(); 
     this.For<IServiceA>.Use<SpecialServiceA>().Named("Special"); 
     this.Profile("Special", p => p.For<IServiceA>().Use("Special")); 

     this.For<IScreen>().Use<NullScreen>(); 
    } 
} 

私は、ネストされたコンテナを構築し、のようなのでコンテナと、現在の画面を登録するファクトリクラスで:私のコマンドの1つに

public void ProcessScreenRequest(IScreen screen) { 
    using(IContainer nestedContainer = this._container.GetNestedContainer(screen.Profile)) { 
     nestedContainer.Configure(x => x.For<IScreen>().Use(screen); 
     //process chain of commands to display screen. 
    } 
} 

ここObjectFactory.Initializeに使用するレジストリがありますそれはIScreenに依存していますが、入れ子になったコンテナ用に設定した "screen"インスタンスを受け取る代わりに、NullScreenを受け取ります。

私が間違っていることがありますか、またはプロファイルされたネストされたコンテナがこのscenerioをサポートしていませんか?

+0

nestedContainer.Configure()メソッドの前にnestedContainer.EjectAllInstancesOf ()を置くと見つかりました。これは設計によるものですか?私がプロファイルなしで入れ子になったコンテナを取得した場合、私はそれがすべて期待通りに動作します。 – awilinsk

答えて

1

私は、nestedContainer.EjectAllInstancesOf()を呼び出すソリューションを使用しています。私はまだコンテナのプロファイルを指定すると、IScreenのデフォルトインスタンスを変更する理由がわかりません。

関連する問題