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 注册。
我在我的项目中使用 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 注册。