如何在温莎城堡工厂方法中达到请求的类型?

Luk*_*ský 4 logging castle-windsor

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

Component
    .For<ILogger>()
    .UsingFactoryMethod((kernel, componentModel, creationContext) => LoggingFactory.GetLogger("..."))
    .LifestyleTransient(),
Run Code Online (Sandbox Code Playgroud)

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

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

And*_*iuc 5

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

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

  • 我可能会使用``LoggingFactory.GetLogger(creationContext.Handler.ComponentModel.Implementation.FullName)``。 (2认同)