2012-04-23 11 views
0

私のアプリケーションサブクラスは、デフォルトのUnityContainerを作成するUnityBootstrapperです。EnterpriseLibraryにUnityBootstrapperによって作成されたUnityContainerを使用する

また、EnterpriseLibraryを使用していて、ブートストラップで作成されたユニティコンテナを使用し、独自のものを作成しないようにするにはどうすればよいですか。

これは許容される方法ですか?我々の推論では、エンタープライズライブラリを直接参照することなく、クラスへのインジェクションによって作成された複数のキャッシュにアクセスできるようにしたいと考えています。

UnityContainerConfiguratorとAddNewExtension()を使用することと、EnterpriseLibraryContainer.Currentを設定することと異なる点があります。私はその違いを理解するのに苦労しており、どちらが正しい解決策なのですか。

答えて

1

明示的にインスタンス化されたコンテナを使用することは完全に受け入れられると思います。 Enterprise Libraryは、Unityの代わりに他の依存性注入フレームワークを切り替えて使用できるように設計されています。また、BYOC(独自の[Unity]コンテナを持ち込むこともできます)。

基本的には、エンタープライズライブラリ拡張を作成してコンテナに追加し、エンタープライズライブラリが使用するサービスロケータとしてコンテナを設定するだけです。

EnterpriseLibraryCoreExtension coreExtension = 
    new EnterpriseLibraryCoreExtension(); 

container.AddExtension(coreExtension); 

IServiceLocator locator = new UnityServiceLocator(container); 
EnterpriseLibraryContainer.Current = locator; 

var cacheManager1 = container.Resolve<CacheManager>("My Cache Manager"); 

var cacheManager2 = EnterpriseLibraryContainer.Current 
         .GetInstance<CacheManager>("My Cache Manager"); 

Debug.Assert(ReferenceEquals(cacheManager1, cacheManager2)); 
+0

感謝:この例では

私はいわゆる "マイCache Managerの" 構成されたCacheManagerとのapp.configを持っています。それは、私が思っていたこと、そして私がやっていたことです。 – tracstarr

+0

現在のようにCurrentに登録すると、Prism地域の管理が乱れるようです。まだこれを解決しようとしています。 – tracstarr

+0

あなたは私の一日を作った! Tnx – MaiOM