Castle Windsor - 解析根组件类型

时间:2017-07-25 09:54:47

标签: c# .net inversion-of-control castle-windsor

我在项目中使用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));

1 个答案:

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