我正在开发一个新的插件加载器应用程序框架,并阅读所有可用的MEF变体,我认为最具前瞻性和灵活性的是从MEF2作为System.Composition提供的NuGet实现。
不幸的是,大多数(如果不是全部的话)在线教程都是为MEF1编写的,即System.ComponentModel.Composition并使用一个AssemblyCatalog创建,该AssemblyCatalog是通过在目录中显式查找all并将其传递给MEF CompositionContainer创建的。
MEF2没有这个对象,因此我仍然不清楚MEF2在哪里找到它的组件。它们不能在运行时定位(这意味着每个插件都需要作为对加载插件的应用程序的引用)?这让我觉得很奇怪。
有人能说明一下如何在System.Composition中指定哪些程序集将从哪里加载(以及如何设置这个程序集)吗?我知道MEF2的设计考虑到了PCL (我正在编写桌面应用程序),但是如果只需要为这种未来的可移植性付出一个小小的设置代价,我就完全支持它了。如果不是,我将屈服于使用System.ComponentModel.Composition,我可以搞清楚。
发布于 2016-04-13 23:03:47
目录由ContainerConfiguration替换:
var conf = new System.Composition.Hosting.ContainerConfiguration();
conf.WithAssembly(Assembly.GetExecutingAssembly());
var container = conf.CreateContainer();
var hwWriter = new HelloWorldWriter();
container.SatisfyImports(hwWriter);
Console.WriteLine(hwWriter.Write);
Console.ReadLine();在ContainerConfiguration中,您将发现更多的With...方法,它们替换了MEF1中的所有不同目录。
https://stackoverflow.com/questions/35011531
复制相似问题