我在项目中使用Castle Windsor IoC容器和NLog。我试图将ILogger注入需要进行日志记录的类。我想将ILogger解析为LogManager.GetLogger(RootTypeName)。
有没有办法获得根类型名称?我试过跟随,但creationContext.RequestedType不是根类型。
container.Register(Component.For<ILogger>()
.UsingFactoryMethod((y, creationContext) =>
LogManager.GetLogger(creationContext.RequestedType.FullName))
.LifestyleTransient());
StructureMap可以做到这一点
x.For<Logger>().Use(y => LogManager.GetLogger(y.RootType.FullName));
答案 0 :(得分:1)
你可以通过subresolver实现这个......
public class LoggerResolver : ISubDependencyResolver
{
public bool CanResolve(CreationContext context, ISubDependencyResolver contextHandlerResolver, ComponentModel model, DependencyModel dependency)
{
return dependency.TargetType == typeof(ILogger);
}
public object Resolve(CreationContext context, ISubDependencyResolver contextHandlerResolver, ComponentModel model, DependencyModel dependency)
{
return new LogManager.GetLogger(model.Implementation.FullName);
}
}
而不是加入内核,
Kernel.Resolver.AddSubResolver(new LoggerResolver())
并删除之前的ILogger注册。