c# - CaSTLe Windsor - 获取正在解析的根组件类型

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

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

相关文章:

c# - 将字符串拆分为多个字母和数字段

c# - 是否可以更改 C# 中 finally 子句中的返回值?

.NET 库访问 PE header

c# - 一个接口(interface)与 DI 的多种实现

inversion-of-control - 使用 IOC 容器的优缺点是什么?

javascript - 如何在 WebView Windows 10 UWP 中调用 javascript?

c# - .NET Core 配置的环境变量与构建配置

c# - 如何在具有单行ListView 的移动屏幕上快速显示附加数据?

c# - 有什么方法可以使用 Xamarin Forms 预呈现 WebView 控件吗?

c# - 将参数传递给 IServiceLocator