我在我的项目中使用 CaSTLe Windsor IoC 容器和 NLog。我正在尝试将 ILogger 注入(inject)到需要日志记录的类中。我希望 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));
最佳答案
您可以使用子解析器来实现这一点...
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 注册。
关于c# - CaSTLe Windsor - 获取正在解析的根组件类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45299811/