我在我的类上设置了以下ExportMetaData属性:[Export(typeof(IDocumentViewer))][ExportMetadata("Name","MyViewer")][ExportMetadata("SupportsEditing",true)][ExportMetadata("Formats",DocFormat.DOC,IsMultiple=true)][ExportMetadata("Formats",DocFormat.DOCX,IsMultiple=true)][ExportMetadata("Formats",DocFormat.RTF,IsMul
我正试图将注意力集中在MEF上。有一件事我不明白。假设我有一个名为ISomething的接口(interface),它是一个契约(Contract),并且我在包含我的应用程序的文件夹中有多个程序集,我不知道其中有多少ISomething实现,或者哪个包含一个。如果我创建了一个使用MEF的主机应用程序,并且想要获得一个ISomething,但只有一个,MEF如何决定它将给我哪个实现?或者,类似于普通的IoC容器,我该如何告诉它应该使用哪个实现?预先感谢您的回答。 最佳答案 参见thisblogpost讨论这个问题和你有的一些选择。此外
我想通过MEF将通用类导出到通用接口(interface)。我的目标是:publicinterfaceIService{}[Export(typeof(IService))]//error!!!!!!publicclassService{}publicclassClient{[Import]privateIService_service;}但是当我尝试导出IService,我得到这个错误:Attributeargumentcannotusetypeparameters有人可以指导我这样做吗? 最佳答案 尝试[Export(typeo
PRISM和MEF等框架使得使用多个可组合组件设计复杂的应用程序变得非常容易。一个常见的示例是插件架构,其中可以使用插件UI组件动态地重新配置应用程序外壳(例如,通过将DLL放入Plug-ins目录)。一切都很好,但正如Vaccano在CanPrismbemodularwhencallingwebservices?中发现的那样在某些情况下,每个单独的插件都需要自己的一组配置-WCF绑定(bind)是一个典型示例,但还有许多其他场景(日志记录、数据库连接等)具有类似的需求。因此,在我看来,我们的选择是:所有配置都进入shell应用程序的App.config(正如Vaccano提到的那样,
我正在使用VisualStudio2010,尝试创建一个MEF应用程序。这需要.NET4.0还是我可以面向.NET2.0? 最佳答案 是的,你这样做:Applicationrequirementschangefrequentlyandsoftwareisconstantlyevolving.Asaresult,suchapplicationsoftenbecomemonolithicmakingitdifficulttoaddnewfunctionality.TheManagedExtensibilityFramework(MEF)
我一直在为基于Web的应用程序使用WindsorIoC容器,以解析应用程序应使用的数据访问层实现。Web应用程序的UI将由页面组成,每个页面由称为portlet的小单元组成。(它们的概念有点类似于小部件。)这些所谓的portlet基本上是Web控件,可以在运行时为每个页面单独配置。该应用程序将附带其中一些内置功能,但我希望能够轻松扩展它。我发现这种机制正是MEF的构建目的。所以我决定以这样的方式实现系统,即它使用MEF发现portlet。然后,我意识到它也可以完成我目前使用Windsor的功能,所以我决定放弃Windsor,转而使用MEF。显然,我必须使用DirectoryCatalo
我希望为VisualStudio创建一个自定义项目系统。但是网上的一些资料让我有些困惑。它们都指的是VSPackage,据我所知,这些与VSIX完全不同。我现有的扩展功能是通过VSIX提供的。是否无法通过VSIX提供新的项目类型?我还查看了他们的示例代码,它是一些可怕的COM东西。对于项目,是否没有新的Shiny的MEF东西,比如用语法高亮和东西扩展编辑器? 最佳答案 没有用于实现对新项目系统的支持的MEF支持/API。您可以通过两种方式实现支持。直接实现VisualStudioAPI。这个选项非常复杂,但并不限制您使用特定的构建系
我正在创建一个导入多个插件的应用程序。我需要能够执行在每个插件中实现的功能。例如,我需要做这样的事情。/////////////////////////////////////////////////////////////////////////////////MainApp:[ImportMany(?)]publicIEnumerable>PluginFunctions1{get;set;}[ImportMany(?)]publicIEnumerable>PluginFunctions2{get;set;}foreach(f1inPluginFunctions1){f1();//e
谁能解释一下SatisfyImportsOnce和ComposeParts之间的区别,以及为什么一个可以工作而另一个不能?具体来说,我有一个在其中使用MEF的MVCWeb应用程序。下面是一些代码(来自该应用程序)在我使用SatisfyImportsOnce时有效,但在我使用ComposeParts时无效。我的理解是,ComposeParts从属性对象数组创建可组合部件,并将它们组合在指定的组合容器中,而SatisfyImportsOnce使用指定的组合服务组合指定的部件。对我简单的猴子大脑来说,尽管英语不同,但它们在语义上是相同的。两者都使用CompositionContainer在导
如何将已创建的实例添加到MEF容器/目录以在解析导入时使用。我想要Unity通过其容器上的RegisterInstance方法提供的功能。 最佳答案 您可以使用ComposeExportedValue为此功能,像这样:varcontainer=newCompositionContainer();container.ComposeExportedValue("Application",Application.Current); 关于c#-将实例添加到MEF容器,我们在StackOverfl