C# MEF:DirectoryPartCatalog
我试图写一个简单的演示来了解它。我正在学习教程,但它似乎已经过时了。可下载的示例可以工作,但它使用的包含程序集比FramWork 4附带的当前版本(4.0)旧2个版本(2008.9.4.0) 特别是,它使用了我在最新库中找不到的DirectoryPartCatalog。有没有人能提供一个示例,说明如何使用当前版本的MEF从目录中发现可插入程序集C# MEF:DirectoryPartCatalog,c#,.net,mef,C#,.net,Mef,我试图写一个简单的演示来了解它。我正在学习教程,但它似乎已经过时了。可下载的示例可以工作,但它使用的包含程序集比FramWork 4附带的当前版本(4.0)旧2个版本(2008.9.4.0) 特别是,它使用了我在最新库中找不到的DirectoryPartCatalog。有没有人能提供一个示例,说明如何使用当前版本的MEF从目录中发现可插入程序集 感谢DirectoryPartCatalog现在被称为我认为,您正在搜索您需要进行一些更改,以使此示例使用内置版本的System.ComponentMo
感谢DirectoryPartCatalog现在被称为我认为,您正在搜索您需要进行一些更改,以使此示例使用内置版本的System.ComponentModel.Composition编译和运行
class Program
{
[ImportMany] // [Import]
public IEnumerable<string> Messages { get; set; }
[ImportMany] // [Import]
public IEnumerable<IOutputString> OutputSet { get; set; }
[Import("OutputMessages")]
public Action<IEnumerable<IOutputString>, IEnumerable<string>> OutputMessages { get; set; }
public void Run()
{
var catalog = new AggregateCatalog(); // AggregatingComposablePartCatalog
catalog.Catalogs.Add(new DirectoryCatalog(@"..\..\..\ExternalMessages\bin\Debug")); // DirectoryPartCatalog
catalog.Catalogs.Add(new DirectoryCatalog(@"..\..\..\ExtraMessages")); // DirectoryPartCatalog
catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly())); // AttributedAssemblyPartCatalog
var container = new CompositionContainer(catalog); // CompositionContainer(catalog.CreateResolver());
// container.AddPart(this);
// container.Compose();
container.ComposeParts(this);
OutputMessages(OutputSet, Messages);
}
static void Main(string[] args)
{
Program p = new Program();
p.Run();
}
}
类程序
{
[进口数量]/[进口]
公共IEnumerable消息{get;set;}
[进口数量]/[进口]
公共IEnumerable输出集{get;set;}
[导入(“输出消息”)]
公共操作输出消息{get;set;}
公开募捐
{
var catalog=new AggregateCatalog();//AggregatingComposablePartCatalog
catalog.Catalogs.Add(新目录目录(@.\..\..\ExternalMessages\bin\Debug));//目录部件目录
catalog.Catalogs.Add(新目录目录(@.\..\..\ExtraMessages));//目录部件目录
catalog.Catalogs.Add(新的AssemblyCatalog(Assembly.getExecutionGassembly());//AttributedAssemblyPartCatalog
var container=new CompositionContainer(catalog);//CompositionContainer(catalog.CreateResolver());
//容器。添加部分(本);
//container.Compose();
容器。组件(本);
输出消息(输出集、消息);
}
静态void Main(字符串[]参数)
{
程序p=新程序();
p、 Run();
}
}
谢谢,它解决了我的很多问题。这非常有用!谢谢