C# 如何使用LightInject注入特定于类的记录器?
许多日志框架提供特定于类的记录器: NLog:C# 如何使用LightInject注入特定于类的记录器?,c#,dependency-injection,light-inject,C#,Dependency Injection,Light Inject,许多日志框架提供特定于类的记录器: NLog:Logger.GetLogger(typeof(MyClass).Name) Serilog:Log.Logger.ForContext() 为了能够注入这些特定于类的记录器,可以在Ninject中执行如下操作: Bind<ILog>().ToMethod(context => { var typeForLogger = context.Request.Target != nu
Logger.GetLogger(typeof(MyClass).Name)
Serilog:Log.Logger.ForContext()
为了能够注入这些特定于类的记录器,可以在Ninject中执行如下操作:
Bind<ILog>().ToMethod(context =>
{
var typeForLogger = context.Request.Target != null ? context.Request.Target.Member.DeclaringType : context.Request.Service;
return context.Kernel.Get<ILoggerFactory>().GetLogger(typeForLogger);
});
Bind().ToMethod(上下文=>
{
var typeForLogger=context.Request.Target!=null?context.Request.Target.Member.DeclaringType:context.Request.Service;
返回context.Kernel.Get().GetLogger(typeForLogger);
});
其中context.Request.Target
提供将接收注入的类型
我找不到任何方法来使用LightInject做同样的事情;此功能是否不受支持(尚未)?发现其他人也有同样的问题: 基本上,解决方案是使用一个logger类,该类接受类名作为构造函数参数:
public interface ILog
{
void Debug(string message, params object[] args);
}
public class SeriLogger : ILog
{
static SeriLogger ()
{
LoggerConfig = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Trace();
}
private readonly ILogger logger;
private static readonly LoggerConfiguration LoggerConfig;
public SeriLogger(Type type)
{
logger = LoggerConfig.CreateLogger().ForContext(type);
}
public void Debug(string message, params object[] args)
{
logger.Debug(message, args);
}
}
然后使用注册表构造函数依赖项注册记录器:
// Wherever you register your types
container.RegisterConstructorDependency<ILog>((factory, info) => new SeriLogger(info.Member.DeclaringType));
//无论您在哪里注册类型
container.RegisterConstructorDependency((工厂,信息)=>newserilogger(info.Member.DeclaringType));