0

私のアプリケーションは、デフォルトのUnityContainerを作成するUnityBootstrapperをサブクラス化します。

また、EnterpriseLibraryを使用しており、独自のコンテナーを作成するのではなく、ブートストラッパーで作成されたユニティコンテナーを使用するように強制します。

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

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

4

1 に答える 1

1

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

基本的には、Enterprise Library拡張機能を作成してコンテナーに追加し、EnterpriseLibraryが使用するサービスロケーターとしてコンテナーを設定するだけです。

この例では、「MyCacheManager」と呼ばれるCacheManagerが構成されたapp.configがあります。

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));
于 2012-04-24T05:56:04.300 に答える