尝试获取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。
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");