C# MEF:如果我有多个导出,但只需要一个导入怎么办?
我正试着让我的思想围绕着我。 有一件事我不明白 假设我有一个名为ISomething的接口,它是一个协定,并且在包含我的应用程序的文件夹中有多个程序集,我不知道其中有多少ISomething实现,或者哪个包含一个 如果我创建了一个主机应用程序,在其中我使用MEF,并且希望得到一个东西,但只有一个,那么MEF如何决定它将给我什么实现 或者,与常见的IoC容器类似,我如何告诉它应该使用哪个实现C# MEF:如果我有多个导出,但只需要一个导入怎么办?,c#,.net,mef,C#,.net,Mef,我正试着让我的思想围绕着我。 有一件事我不明白 假设我有一个名为ISomething的接口,它是一个协定,并且在包含我的应用程序的文件夹中有多个程序集,我不知道其中有多少ISomething实现,或者哪个包含一个 如果我创建了一个主机应用程序,在其中我使用MEF,并且希望得到一个东西,但只有一个,那么MEF如何决定它将给我什么实现 或者,与常见的IoC容器类似,我如何告诉它应该使用哪个实现 提前感谢您的回答。对于MEF,如果您有许多可以满足导入要求的导出,您有两种选择: 将导入更改为使用[Imp
提前感谢您的回答。对于MEF,如果您有许多可以满足导入要求的导出,您有两种选择:
[ImportMany]
。在运行时,决定将哪些导入用于合同,可能只是选择第一个导入,或者随机选择一个导入[ImportMany]
,以决定使用哪个导入有关此问题的讨论以及您的一些选项,请参阅。另外,Glenn Block也有一篇博客文章介绍了如何使用它。这是一个好主意,但是,我更喜欢在Windsor中这样做,从配置中指定一个具体的实现,并告诉MEF使用它。@Venemo:您应该能够在运行时使用元数据来实现。Glenn关于ExportProviders的文章给了我一个好主意。也许我应该让ExportProvider接受某种配置,在这种配置中可以指定默认的导出。这是完全合理的,这也是我们考虑的场景之一。