我已经设置了一个asp.net mvc 4解决方案,使用Castle Windsor作为我的DI容器。我也在使用log4Net工具。我已经在global.asax中设置了容器,如Windsor网站所示......
private static IWindsorContainer container;
private static void BootstrapContainer()
{
container = new WindsorContainer()
.Install(FromAssembly.This());
var controllerFactory = new WindsorControllerFactory(container.Kernel);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);
}
我有安装程序设置,我通过构造函数成功地将服务注入到我的控制器中。我也在我的控制器中成功使用了log4Net工具。
我想知道如何使用容器来解析控制器外部的接口ILogger(log4net组件的接口)。例如,在自定义HandleError过滤器中。
答案 0 :(得分:1)
不确定您对DI的概念有多了解。您需要自己实现这个概念。 DI容器不能为您做到这一点。最低限度,在HandleError
类中实现此属性和构造函数;这为该类提供了DI,并且可以注入记录器。
private ILogger Logger { get; set; }
public HandleError(ILogger logger)
{
Logger = logger;
}
您提出问题的方式会引发您可能不知道如何注入记录器的想法。如果您不提供DI,则DI容器无法正常工作。最终,引导程序是(理想情况下)解决依赖关系的地方。