c# - 单个 MEF DLL 的多个实例

标签 c# mef

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

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

最佳答案

一种方法是自己为记录器编写一个工厂,并将其用作您导出的契约(Contract)。

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 添加到您的容器中,以允许您导入工厂。在最新的 MEF 下降 CodePlex ,有一个 DynamicInstantiation 示例展示了如何执行此操作。

关于c# - 单个 MEF DLL 的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2878265/

相关文章:

c# - 如何使用C#实现对某年某金额的查询

F# 和 MEF : Exporting Functions

silverlight - 使用 MEF Prism 和 Silverlight 按需加载模块

c# - 我在哪里可以了解 MEF?

c# - 属性要求用户登录而不是拒绝访问?

c# - WCF 自定义验证器 : How to initialize a "User" object from custom validator

c# - 如何将 DateTime 的 "time"转换为 int?

c# - 如何在 Azure 通信服务聊天中附加文件?

C#/MEF 不适用于没有无参数构造函数的基类

.net - CompositionBatch : AddPart vs AddExport