【问题标题】:How to get to the requesting type in a Castle Windsor factory method?如何在 Castle Windsor 工厂方法中获取请求类型?
【发布时间】:2015-11-11 17:37:34
【问题描述】:

我想在组件注册期间使用工厂方法来集成静态记录器工厂,如下所示:

Component
    .For<ILogger>()
    .UsingFactoryMethod((kernel, componentModel, creationContext) => LoggingFactory.GetLogger("..."))
    .LifestyleTransient(),

GetLogger 类需要日志记录上下文的名称。我想在那里传递请求记录器的类的全名。在这种情况下,这将是明确的,因为 ILogger 服务的生活方式是短暂的。

我看到有creationContext.RequestedType(包含ILogger),但没有creationContext.RequestingType

【问题讨论】:

    标签: logging castle-windsor


    【解决方案1】:

    您可以从creationContext.Handler.ComponentModel.Name 获取解析类型。 以下代码应该可以满足您的需要:

    Component
       .For<ILogger>()
       .UsingFactoryMethod((kernel, componentModel, creationContext) => LoggingFactory.GetLogger(creationContext.Handler.ComponentModel.Name))
       .LifestyleTransient(),
    

    【讨论】:

    • 这不完全是因为组件名称有时与类型名称不同,即使在注册期间没有明确设置名称的情况下——例如,在拦截器中。但是,它仍然对我有用。谢谢!
    • 我可能会使用LoggingFactory.GetLogger(creationContext.Handler.ComponentModel.Implementation.FullName)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    相关资源
    最近更新 更多