EnterpriseLibraryContainer实例何时创建?

时间:2011-02-22 05:38:12

标签: c# dependency-injection enterprise-library

我正在尝试使用Enterprise Library 5.0。我的计划是将它用于ASP.Net MVC的项目。我看了几个例子,正在尝试记录。在这个例子中,我看到开发人员通过以下方式获取了一个logger实例:

LogWriter logWriter = EnterpriseLibraryContainer.Current.GetInstance<LogWriter>();

以上代码在我的应用程序中运行良好。在这段代码中,基本上我们从现有容器中获取一个实例,对吗?我的问题是:

  1. 如何以及何时创建容器实例?
  2. 我可以在MVC中使用相同的容器吗?
  3. 使用this method创建容器以及为什么不在MVC中使用EnterpriseLibraryContainer实例的想法是什么?
  4. 提前感谢您的评论,想法和提示溶液

1 个答案:

答案 0 :(得分:3)

如果未事先显式初始化Enterprise Library容器,则会在第一次访问时自动创建它。

EnterpriseLibrary.Current实例适用于本来不需要或不关心容器的设计,只想获取Entlib对象。如果你已经在使用DI容器(我假设是Unity,因为你没有说),直接从你正在使用的容器中获取你的Entlib对象会更快更容易。

使用Unity,您需要做的就是,在创建容器时,执行:

container.AddNewExtension<EnterpriseLibraryCoreExtension>();

并且会将entlib配置加载到容器中。从那里,您可以像解析任何其他依赖项一样将Entlib对象解析为依赖项。因此,对于上面的代码,您可以通过在控制器上使用LogWriter类型的构造函数参数来获取LogWriter。

我不建议在MVC应用程序中使用EnterpriseLibraryContainer来满足您的所有IOC需求;我会说使用你控制的显式容器。