Castle Windsor - 获取正在解析的根组件类型

Castle Windsor - Get Root Component type being resolved

我在我的项目中使用 Castle Windsor IoC 容器和 NLog。我正在尝试将 ILogger 注入到 类 需要日志记录的地方。我希望 ILogger 解析为 LogManager.GetLogger(RootTypeName).

有没有办法获取根类型名称?我试过跟随,但 creationContext.RequestedType 没有 root 类型。

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 注册。