代码之家  ›  专栏  ›  技术社区  ›  Tushar Kesare

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

  •  2
  • Tushar Kesare  · 技术社区  · 8 年前

    我在我的项目中使用了温莎城堡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 回复  |  直到 8 年前
        1
  •  2
  •   Jan Muncinsky    8 年前

    您可以使用子解析器实现这一点。。。

    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())
    

    推荐文章