如何在 MVC 之外使用城堡容器

本文关键字:城堡 MVC | 更新日期: 2023-09-27 18:36:54

我已经设置了一个 asp.net mvc 4解决方案来使用温莎城堡作为我的DI容器。我也在使用它的log4Net工具。我已经在 global.asax 中设置了容器,如温莎网站上所示......

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 组件的接口)。例如,在自定义句柄错误筛选器中。

如何在 MVC 之外使用城堡容器

不确定您对 DI 概念的理解程度如何。您需要自己实现该概念。DI 容器不会为你执行此操作。至少要在 HandleError 类中实现此属性和构造函数;这为该类提供了 DI,并且可以注入记录器。

private ILogger Logger { get; set; }
public HandleError(ILogger logger)
{
    Logger = logger;
}

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