【问题标题】:Resolving imports by namespace with MEF使用 MEF 按命名空间解析导入
【发布时间】:2011-09-06 09:28:24
【问题描述】:

我使用 MEF 作为 IoC 容器。

如果请求类在 Foo.UI.* 命名空间中,我希望 ILogger 解析为 ClientLogger,否则它应该解析为 Logger。我可以这样做吗?

【问题讨论】:

    标签: .net dependency-injection namespaces ioc-container mef


    【解决方案1】:

    也许有这样的解决方法,使用命名导出?

    [Export("clientLogger", typeof(ILogger))]
    public class ClientLogger : ILogger {}
    
    [Export("logger", typeof(ILogger))]
    public class logger: ILogger {}
    

    Foo.UI.* 中的请求类型是这样装饰的

    [ImportingConstructor]
    public MyService([Import("clientLogger", typeof(ILogger))]ILogger logger)
    

    我知道这不是最好的解决方案,但也许它会起作用。

    【讨论】:

      【解决方案2】:

      Thomas 使用命名导出的解决方案可能是使用 .NET 4 版本的 MEF 可以做到的最好的解决方案。在 MEF 的下一个版本中,您可能可以通过 RegistrationBuilder 使用约定将 UI 命名空间中的任何 ILogger 导入更改为命名导入。 IE,有效地按照 Thomas 的建议进行操作,但按照惯例进行操作,而不必将其应用于您的每个类。

      codeplex 上提供了 MEF 下一版本的预览版。

      【讨论】:

      • 丹尼尔,很高兴知道 :) 期待下一个版本 :)
      猜你喜欢
      • 2022-01-12
      • 2021-05-03
      • 2014-01-10
      • 1970-01-01
      • 2018-07-15
      • 2012-06-11
      • 2015-09-08
      • 2011-09-20
      相关资源
      最近更新 更多