gpt4 book ai didi

c# - log4net、CaSTLe Windsor 和 Global.asax 中的 Application_Error 方法

转载 作者:行者123 更新时间:2023-11-30 18:01:48 25 4
gpt4 key购买 nike

我关注了 tutorial to setup log4net使用温莎容器。与本教程一样,我设置了 LoggerInstaller 类:

public class LoggerInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.AddFacility<LoggingFacility>(
f => f.LogUsing(LoggerImplementation.Log4net)
.WithConfig("log4net.config"));
}
}

在 Global.asax 中,我有以下方法:

private static void BootStrapContainer()
{
container = new WindsorContainer()
.Install(FromAssembly.This());
var controllerFactory = new WindsorControllerFactory(container.Kernel);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);
}

protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();

RegisterRoutes(RouteTable.Routes);

BootStrapContainer();
}

以及要注入(inject)的 ILogger 类型:

public ILogger Logger { get; set; }

这在具有 ILogger 属性的 Controller 上运行良好,但我似乎无法将其注入(inject) Global.asax。我想要做的是在 Application_Error 方法中记录未处理的异常,如下所示:

void Application_Error(Object sender, EventArgs e)
{
Exception ex = Server.GetLastError().GetBaseException();

Logger.Error("App_Error", ex);
}

LoggerInstaller 在 Application_Start() 期间被调用但没有注入(inject)。任何帮助,将不胜感激。我敢肯定这可能是我忽略的简单问题。

最佳答案

“Logger”不会被注入(inject)“global.asax”,因为该类尚未通过 Windsor/IoC 容器创建(无法完成)。

如果您需要“Application_Error”中的记录器,我建议您在“Application_Start”中创建您的容器,将其私有(private)化到“global.asax”类中,并在“Application_Error”方法中使用 Resolve/Release 方法

void Application_Error(Object sender, EventArgs e) 
{
Exception ex = Server.GetLastError().GetBaseException();

var logger = _container.Resolve<ILogger>();
logger.Error("App_Error", ex);
_container.Release(logger);
}

关于c# - log4net、CaSTLe Windsor 和 Global.asax 中的 Application_Error 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8680872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com