Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/341.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:DirectoryPartCatalog_C#_.net_Mef - Fatal编程技术网

C# MEF:DirectoryPartCatalog

C# MEF:DirectoryPartCatalog,c#,.net,mef,C#,.net,Mef,我试图写一个简单的演示来了解它。我正在学习教程,但它似乎已经过时了。可下载的示例可以工作,但它使用的包含程序集比FramWork 4附带的当前版本(4.0)旧2个版本(2008.9.4.0) 特别是,它使用了我在最新库中找不到的DirectoryPartCatalog。有没有人能提供一个示例,说明如何使用当前版本的MEF从目录中发现可插入程序集 感谢DirectoryPartCatalog现在被称为我认为,您正在搜索您需要进行一些更改,以使此示例使用内置版本的System.ComponentMo

我试图写一个简单的演示来了解它。我正在学习教程,但它似乎已经过时了。可下载的示例可以工作,但它使用的包含程序集比FramWork 4附带的当前版本(4.0)旧2个版本(2008.9.4.0)

特别是,它使用了我在最新库中找不到的DirectoryPartCatalog。有没有人能提供一个示例,说明如何使用当前版本的MEF从目录中发现可插入程序集


感谢

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();
}
}

谢谢,它解决了我的很多问题。这非常有用!谢谢