如何在MVC之外使用Castle容器

时间:2015-01-08 23:02:51

标签: c# asp.net asp.net-mvc asp.net-mvc-4 castle-windsor

我已经设置了一个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过滤器中。

1 个答案:

答案 0 :(得分:1)

不确定您对DI的概念有多了解。您需要自己实现这个概念。 DI容器不能为您做到这一点。最低限度,在HandleError类中实现此属性和构造函数;这为该类提供了DI,并且可以注入记录器。

private ILogger Logger { get; set; }

public HandleError(ILogger logger)
{
    Logger = logger;
}

您提出问题的方式会引发您可能不知道如何注入记录器的想法。如果您不提供DI,则DI容器无法正常工作。最终,引导程序是(理想情况下)解决依赖关系的地方。