Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MEF:如果我有多个导出,但只需要一个导入怎么办?_C#_.net_Mef - Fatal编程技术网

C# MEF:如果我有多个导出,但只需要一个导入怎么办?

C# MEF:如果我有多个导出,但只需要一个导入怎么办?,c#,.net,mef,C#,.net,Mef,我正试着让我的思想围绕着我。 有一件事我不明白 假设我有一个名为ISomething的接口,它是一个协定,并且在包含我的应用程序的文件夹中有多个程序集,我不知道其中有多少ISomething实现,或者哪个包含一个 如果我创建了一个主机应用程序,在其中我使用MEF,并且希望得到一个东西,但只有一个,那么MEF如何决定它将给我什么实现 或者,与常见的IoC容器类似,我如何告诉它应该使用哪个实现 提前感谢您的回答。对于MEF,如果您有许多可以满足导入要求的导出,您有两种选择: 将导入更改为使用[Imp

我正试着让我的思想围绕着我。 有一件事我不明白

假设我有一个名为ISomething的接口,它是一个协定,并且在包含我的应用程序的文件夹中有多个程序集,我不知道其中有多少ISomething实现,或者哪个包含一个

如果我创建了一个主机应用程序,在其中我使用MEF,并且希望得到一个东西,但只有一个,那么MEF如何决定它将给我什么实现

或者,与常见的IoC容器类似,我如何告诉它应该使用哪个实现


提前感谢您的回答。

对于MEF,如果您有许多可以满足导入要求的导出,您有两种选择:

  • 将导入更改为使用
    [ImportMany]
    。在运行时,决定将哪些导入用于合同,可能只是选择第一个导入,或者随机选择一个导入
  • 结合使用
    [ImportMany]
    ,以决定使用哪个导入

  • 有关此问题的讨论以及您的一些选项,请参阅。另外,Glenn Block也有一篇博客文章介绍了如何使用它。

    这是一个好主意,但是,我更喜欢在Windsor中这样做,从配置中指定一个具体的实现,并告诉MEF使用它。@Venemo:您应该能够在运行时使用元数据来实现。Glenn关于ExportProviders的文章给了我一个好主意。也许我应该让ExportProvider接受某种配置,在这种配置中可以指定默认的导出。这是完全合理的,这也是我们考虑的场景之一。