0

我的应用程序子类 UnityBootstrapper 创建默认的 UnityContainer。

我们还使用 EnterpriseLibrary 以及强制它使用我们在引导程序中创建的统一容器而不是创建它自己的容器。

这是可接受的做法吗?我们的理由是,我们希望能够访问通过注入类创建的缓存(我们有多个),而无需直接引用企业库。

我已经看到了与使用 UnityContainerConfigurator 和 AddNewExtension() 以及仅设置 EnterpriseLibraryContainer.Current 不同的东西。我很难理解其中的区别以及正确的解决方案。

4

1 回答 1

1

我认为使用显式实例化的容器是完全可以接受的。企业库旨在允许您切换和使用其他依赖注入框架而不是 Unity,或者您可以 BYOC(带上您自己的 [Unity] 容器)。

基本上,您只需要创建 Enterprise Library 扩展并将其添加到容器中,然后将容器设置为 Enterprise Library 将使用的服务定位器。

在此示例中,我有一个 app.config,其中配置了一个名为“我的缓存管理器”的 CacheManager:

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 回答