c# – 将log4net与Autofac一起使用
发布时间:2020-12-15 23:23:22 所属栏目:百科 来源:网络整理
导读:我正在尝试将log4net与Autofac一起使用. 我已粘贴此代码 http://autofac.readthedocs.org/en/latest/examples/log4net.html, 从Program.cs / Main()我正在做 var iocBuilder = new ContainerBuilder();iocBuilder.RegisterModule(new LoggingModule());var i
我正在尝试将log4net与Autofac一起使用.
我已粘贴此代码 http://autofac.readthedocs.org/en/latest/examples/log4net.html, 从Program.cs / Main()我正在做 var iocBuilder = new ContainerBuilder(); iocBuilder.RegisterModule(new LoggingModule()); var iocContainer = iocBuilder.Build(); 现在我想立即尝试(在下一行), 我在想这样的事情 var ls = iocContainer.Resolve<LoggingModule>(); ls.Info("the logging is working"); 非常感谢 解决方法
要获得ILog,log4net需要知道使用记录器的类(LogManager.GetLogger(…)).因此,如果没有父类,则无法解析ILog.您必须在组件中注入ILog.
public class MyComponent { public MyComponent(ILog logger) { this._logger = logger; } private readonly ILog _logger; public void Do() { this._logger.Info("Log4net OK"); } } 在应用程序启动时(Asp.net的Global.asax.cs,MVC): // ... log4net.Config.XmlConfigurator.Configure(); // ... iocBuilder.RegisterModule(new LoggingModule()); iocBuilder.RegisterType<MyComponent>().AsSelf(); // ... MyComponent c = iocContainer.Resolve<MyComponent>(); c.Do(); 另一种解决方案是注册ILog for Object并解决ILog.在这种情况下,不需要该模块. //在DI容器构建器中: log4net.Config.XmlConfigurator.Configure(); /// ... ContainerBuilder cb = new ContainerBuilder() cb.Register(c => LogManager.GetLogger(typeof(Object))).As<ILog>(); IContainer container = cb.Build(); //在我们需要记录器的函数中: ILog logger = container.Resolve<ILog>(); logger.Info("log4net OK"); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |