我正在使用 autofac 并尝试注册 WebApi 控制器。每个控制器都采用一个唯一的Logging.ILog
作为构造函数参数(这是我的 ILog 适应 log4net ILog)。当记录器被解析时,我希望根据它们被解析的控制器来命名它们。
像这样的东西:
builder.Register(c => log4net.LogManager.GetLogger("NEED CONTROLLER NAME HERE"));
builder.Register(c => new Logging.Adapters.Log4NetAdapter(c.Resolve<log4net.ILog>()));
builder.RegisterType<Logging.Adapters.Log4NetAdapter>().As<Logging.ILog>();
builder.RegisterApiControllers(System.Reflection.Assembly.GetExecutingAssembly());
知道如何让每个 WebApi 控制器根据控制器类型名称接收单独的记录器名称吗?
以下似乎可行,但似乎并不理想。
builder.Register(c => log4net.LogManager.GetLogger(c.ComponentRegistry.Registrations.Last().Activator.LimitType.Name));
builder.Register(c => new Logging.Adapters.Log4NetAdapter(c.Resolve<log4net.ILog>()));
builder.RegisterType<Logging.Adapters.Log4NetAdapter>().As<Logging.ILog>();
builder.RegisterApiControllers(System.Reflection.Assembly.GetExecutingAssembly());
我是autofac的新手,所以请耐心等待。
如果您注意到上面我有一个附加层或我自己的 ILog 和 Log4NetAdapter/Wrapper,那么控制器和实际的 log4net 之间有几层注册。
我需要类似的东西:
APIController <- Logging.ILog <- Logging.Adapters.Log4NetAdapter <- log4net.ILog <- log4net.LogManager.GetLogger(APIController-Name)