升级到Enterprise Library 6.0会出现"EnterpriseLibraryContainer"问题

Jon*_*n V 4 c# enterprise-library

升级到Enterprise Library 6.0后,我遇到以下问题:

private static IUnityContainer container = EnterpriseLibraryContainer.Current.GetInstance();

无法解析EnterpriseLibraryContainer

我在stackoverflow上发现了另一篇关于EnterpriseLibraryCOntainer的帖子

在Enterprise Library的升级说明中,它指出:

"当前上下文中不存在名称'EnterpriseLibraryContainer'

所有块的引导代码在Enterprise Library的第6版中已更改.这些块不再使用Unity来管理初始化和配置,现在每个块都包含自己的引导代码.对EnterpriseLibraryContainer.Current.GetInstance方法的任何调用以解析其中一个Enterprise Library块的类型都应该替换为块特定的引导代码.例如,要基于app.config文件中的配置创建LogWriter实例,现在可以使用以下代码:LogWriterFactory logWriterFactory = new LogWriterFactory(); var logWriter = logWriterFactory.Create();

但我不知道如何处理IUnityContainer的情况.我可以用吗?

IUnityContainer容器=新的UnityContainer?

谢谢你的帮助

Ran*_*ica 5

典型的方法是引导块,使用Unity注册适当的对象并让Unity注入依赖项.

例如,如果您正在使用日志记录,那么您将引导块:

LogWriterFactory logWriterFactory = new LogWriterFactory(); 
LogWriter logWriter = logWriterFactory.Create();
Run Code Online (Sandbox Code Playgroud)

并使用UnityContainer注册LogWriter:

IUnityContainer container = new UnityContainer();
// Register LogWriter as singleton
container.RegisterInstance<LogWriter>(logWriter);
Run Code Online (Sandbox Code Playgroud)

如果您使用EnterpriseLibraryContainer作为服务定位器并希望继续使用相同的方法,那么您可以创建/包装服务定位器实现或创建静态帮助器方法.Unity带有UnityServiceLocator,您可以重复使用它.

如果您不使用Unity,另一种方法是引导块,然后EnterpriseLibraryContainer.Current.GetInstance<>()使用静态Facade方法替换调用(例如Logger.Write()).