【发布时间】:2017-03-08 21:34:49
【问题描述】:
按照answer 我做了这个:
public class Log4netAdapter<T> : ILogger
{
private static readonly log4net.ILog logger = LogManager.GetLogger(typeof(T));
public void Log(LogEntry entry)
{
if(entry.LoggingEventType == LoggingEventType.Information)
logger.Info(entry.Message, entry.Exception);
else if(entry.LoggingEventType == LoggingEventType.Warning)
logger.Warn(entry.Message, entry.Exception);
else if(entry.LoggingEventType == LoggingEventType.Error)
logger.Error(entry.Message, entry.Exception);
else
logger.Fatal(entry.Message, entry.Exception);
}
}
然后是简单的注射器:
container.RegisterConditional(
typeof(ILogger),
c => typeof(Log4netAdapter<>).MakeGenericType(c.Consumer.ImplementationType),
Lifestyle.Singleton,
c => true);
如果我将 ILogger 注入到我需要的每个类构造函数中,这将非常有用。我的问题是我有一些类不能使用构造函数注入。对于这种情况,我通常会这样做:
var logger = SimpleInjectorInitializer.Container.GetInstance<ILogger>();
但是上述方法不起作用,它会在简单注入器类上引发错误,因为c.Consumer 是null。
这里是我需要解析ILogger的例子之一,这个类是在webapi启动类上注册的。
public class ExceptionWebApiHandlingAttribute : IExceptionFilter
{
public ExceptionWebApiHandlingAttribute()
{
}
}
还有其他选择吗?
谢谢
【问题讨论】:
-
您能否举例说明您需要在哪里解析
ILogger以及为什么这样做? -
嗨@Steven。非常感谢您的回复。我更新了我原来的问题。
标签: c# log4net simple-injector