【问题标题】:Multiple Instances of a single MEF DLL单个 MEF DLL 的多个实例
【发布时间】:2026-02-22 07:55:02
【问题描述】:

显然 .NET 4.0 没有用于非 SL 的 PartCreator/ExportFactory。这是我认为我需要的。

我想知道是否有人可以帮助我(请提供示例)如何在 DLL 中创建 EXPORTED 类型的多个实例。基本上说我有一个包含 ConsoleLogger 类型的 DLL,它使用 ILogger 接口(我通过 MEF 导入/导出)......我将如何创建 ConsoleLogger 的实例,只要我想?还有..这有可能吗?

【问题讨论】:

    标签: c# mef


    【解决方案1】:

    一种方法是自己为记录器编写一个工厂,并将其用作您导出的合同。

    public class Logger : ILogger
    {
        public Logger(IFoo foo) { }
        // ...
    }
    
    [Export(typeof(ILoggerFactory))]
    public class LoggerFactory : ILoggerFactory
    {
        [Import]
        public IFoo Foo { get; set; }
    
        public ILogger CreateLogger()
        {
            return new Logger(Foo);
        }
    }
    

    然后您只需导入一个 LoggerFactory,并在每次需要记录器时调用 CreateLogger。如果您导入 ExportFactory,这与您所做的几乎相同。缺点是您必须为每个您希望能够创建多个实例的事物编写一个单独的工厂。

    另一种选择是将 ExportProvider 添加到允许您导入工厂的容器中。在CodePlex 上的最新 MEF drop 中,有一个 DynamicInstantiation 示例展示了如何执行此操作。

    【讨论】:

      【解决方案2】:

      MEF 2 Preview 1 将 ExportFactory 带入 .NET 3.5 和 4.0:

      • ExportFactory 从 SL 移至 .net
      • 桌面版部分代码
      • 重构和性能改进
      • 代码协定两个程序集都是
      • 强命名签名

      【讨论】:

        最近更新 更多