0

我在为我的 Castle Windsor 容器设置正确的绑定方面有点挣扎。最初的问题涉及 log4net 和命名记录器,可以在这个问题中找到描述:设置 log4net 记录器的名称

但是,现在问题缩小到了这一点:

我有一个实现 IAuditor 的类 Log4NetAuditor。我的一些类扩展了我的抽象类 AuditableComponent,它具有 IAuditor 类型的属性 Auditor。当我用 Castle 注册 IAuditor 时,它知道如何为所有扩展 AuditableComponent 的类解析和设置 Auditor。

现在,我需要 Log4NetAuditor 的构造函数来获取 Type 参数。该类型应该是扩展 AuditableComponent 的类的类型。我试图通过工厂方法实现这一点,但我无法解决:

container.Register(Component.For<IAuditor>().ImplementedBy<Log4NetAuditor>()
        .UsingFactoryMethod(RegisterAuditor).LifeStyle.Transient);

private static IAuditor RegisterAuditor(IKernel kernel, ComponentModel model, CreationContext context)
{
    Type loggerType = //magic to find correct type happens here

    return new Log4NetAuditor(loggerType, kernel.Resolve<ILoggerFactory>());
}

我对这个问题视而不见。任何人都可以帮忙吗?

4

2 回答 2

1

Castle 提供了拦截器,这是为您的应用程序配置日志记录的好方法。请参阅这个问题Castle, AOP and Logging in .NET

于 2011-01-25T08:48:27.650 回答
1

哈-我刚刚遇到了我古老的问题,所以我想我会发布答案。答案取自这个问题:为什么在 Log4Net 中命名为 logger?

关键是像这样在工厂方法中使用 CreationContext

...UsingFactoryMethod((kernel,context) => new MyInstance(context.Handler.ComponentModel.Implementation));

当然 - 根据需要添加您的生活方式。

于 2015-10-30T10:43:48.313 回答