尝试获取LogWriter类型的实例时出现激活错误,键“”?

我有asp.net网站。 我在网站上添加了Microsoft.Practices.EnterpriseLibrary.Logging.dll引用。

在web.cofig文件中,我定义如下。

     

当我运行代码exception发生在下面的地方。

 defaultWriter = EnterpriseLibraryContainer.Current.GetInstance(); //Activation error occured while trying to get instance of type LogWriter, key "" 

怎么解决这个?

完整配置引用了未定义的跟踪侦听器。 这导致Enterprise Library运行时在尝试解析这些引用时抛出运行时exception。

我注释掉了未使用的侦听器(并将默认类别更改为“ Important )并且它正在工作:

    

线索是内在的例外。 在InnerException.Message结束时,它说:

解析System.Diagnostics.TraceListener,Formatted EventLog TraceListener

上面的配置在app.config中。 然后Program.cs包含:

 class Program { static void Main(string[] args) { LogWriter logWriter = EnterpriseLibraryContainer.Current.GetInstance(); logWriter.Write("Test"); } } 

编辑:在EL 6.0下不再有依赖Unity不再在上次编辑时(2013年8月)Unity 3是当前产品。 单元3.0

以下有关EL的App.config编辑器的一些提示仍然有用。 还显示了el5到el6的一些代码更改。

这是我试图澄清的。 el5.0错误错误示例

依赖项的解析失败,type =“Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter”,name =“(none)”。 在解决时发生exception: 例外情况是:InvalidOperationException无法构造LogWriter类型。 您必须配置容器以提供此值。

执行摘要: Unity无法看到库或团队无法找到app.config条目,应用程序配置条目对于正在使用的库不完整,或者存在一些定位问题。 注意所有这些要点。

Enterprise Library 6下载站点下载vsix文件

Microsoft.Practices.EnterpriseLibrary.ConfigConsoleV6.vsix

您可以使用它来正确编辑app.config。

仍然使用nuget来安装软件包,但是你需要上面的下载才能正确编辑app.config

 PM > Install-Package EnterpriseLibrary.Logging PM> Install-Package EnterpriseLibrary.Common Pm> Install-Package Unity PM> Install-Package EnterpriseLibrary.ExceptionHandling 

您可能感兴趣的还有一些ENT库.http://nuget.org/packages?q = entlib

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.Practices.EnterpriseLibrary.Common.Configuration.Unity; using Microsoft.Practices.EnterpriseLibrary.ExceptionHandling; using Microsoft.Practices.EnterpriseLibrary.Logging; using Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.Unity; using Microsoft.Practices.Unity; // << SEPARATE since EL6 , unity 3 has own install. public class abc { ///  /// Unity Container with key dependencies registered ///  public static UnityContainer UC { get; private set; } private static IUnityContainer _IUContainer;// not sure if this is needed public static LogWriter LogWtr; public static ExceptionManager ExcMgr; ///  /// Controller Bootstrap to manage as singleton via static properties and therefore ONLY 1 Unity Container ///  static bootstrap() { UC = new UnityContainer(); // one container per work process. managing and resolving dependencies // DO NO DO THIS WITH NEW VERSION OF Enterprise LIBRARY this was v5, v6 does not need this // now we tell unity about the container manager inside EntLib. // we dont want 2 containers, so we tell UNity look after EntLib as well please // UC.AddNewExtension(); //No need to add The extensions individually. //no longer required and indeed Library documents this as obselete // UC.AddNewExtension();** //================ END OF OLD V5 approach ======================== LogWtr = UC.Resolve(); ExcMgr = UC.Resolve(); // other initializations here } } 

使用下载的配置控制台即VSIX。 右键单击app.config。

EntLib配置控制台

APP.CONFIG文件应该有一个包含正在使用的ENtLibraries的部分。 您需要确保正在运行的项目的app.config web配置已在使用Enterprise库控制台配置日志记录或exception处理时添加了条目。

   

这适用于我,使用EL 6.0而不使用Unity

来自web.config文件的Init Logger,位于Global.asax – > Application_Start上

 var configSource = ConfigurationSourceFactory.Create(); Logger.SetLogWriter(new LogWriterFactory(configSource).Create()); 

在MVC控制器上使用logger

 Logger.Write("Hello", "General");