使EnterpriseLibrary使用通过UnityBootstrapper创建的UnityContainer

时间:2012-04-23 17:29:55

标签: unity-container enterprise-library

我的应用程序是UnityBootstrapper的子类,它创建了默认的UnityContainer。

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

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

我已经看到使用UnityContainerConfigurator和AddNewExtension()以及设置EnterpriseLibraryContainer.Current的不同之处。我很难理解差异,这是正确的解决方案。

1 个答案:

答案 0 :(得分:1)

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

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

在这个例子中,我有一个配置了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));