我有一个名为 的类MyClass
,它使用两个不同的记录器,名为Logger1
和Logger2
。我使用 log4net 进行日志记录,并希望将 StructureMap 用于 DI。
如果没有 StructureMap,我的课程将如下所示:
public class MyClass
{
private static readonly ILog Logger1 = LogManager.GetLogger("Logger1"); // Loggers are configured in a config file
private static readonly ILog Logger2 = LogManager.GetLogger("Logger2");
public void DoSomething()
{
...
Logger1.Info("did something");
...
Logger2.Info("need to log this elsewhere");
}
}
引入 DI,使用 StructureMap(使用 v3.0.3),我将创建记录器实例成员,并将它们注入构造函数,如下所示: public class MyClass { private readonly ILog Logger1; 私有只读 ILog Logger2;
myClass(ILog logger1, ILog logger2)
{
this.Logger1 = logger1;
this.Logger2 = logger2;
}
public void DoSomething()
{
...
Logger1.Info("did something");
...
Logger2.Info("need to log this elsewhere");
}
}
问题是,我无法让 StructureMap 为我正确地连接它。我尝试像这样连接记录器:
For<ILog>.Use(()=> LogManager.GetLogger("Logger1")).Named("Logger1");
For<ILog>.Use(()=> LogManager.GetLogger("Logger2")).Named("Logger2");
这样做会让我清空(未配置的)记录器)。由于没有为 ILog 注册默认实例,替换Use()
为我的异常。Add()
有人知道我该怎么做吗?