我正在尝试使用Enterprise Library 5.0。我的计划是将它用于ASP.Net MVC的项目。我看了几个例子,正在尝试记录。在这个例子中,我看到开发人员通过以下方式获取了一个logger实例:
LogWriter logWriter = EnterpriseLibraryContainer.Current.GetInstance<LogWriter>();
以上代码在我的应用程序中运行良好。在这段代码中,基本上我们从现有容器中获取一个实例,对吗?我的问题是:
提前感谢您的评论,想法和提示溶液
答案 0 :(得分:3)
如果未事先显式初始化Enterprise Library容器,则会在第一次访问时自动创建它。
EnterpriseLibrary.Current实例适用于本来不需要或不关心容器的设计,只想获取Entlib对象。如果你已经在使用DI容器(我假设是Unity,因为你没有说),直接从你正在使用的容器中获取你的Entlib对象会更快更容易。
使用Unity,您需要做的就是,在创建容器时,执行:
container.AddNewExtension<EnterpriseLibraryCoreExtension>();
并且会将entlib配置加载到容器中。从那里,您可以像解析任何其他依赖项一样将Entlib对象解析为依赖项。因此,对于上面的代码,您可以通过在控制器上使用LogWriter类型的构造函数参数来获取LogWriter。
我不建议在MVC应用程序中使用EnterpriseLibraryContainer来满足您的所有IOC需求;我会说使用你控制的显式容器。