微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – MEF:DirectoryPartCatalog

我正在尝试编写一个简单的 MEF演示来了解它.我正在关注 this教程,但它似乎已经过时了.可下载的示例有效,但它使用的是比Framwework 4附带的当前版本(4.0)更旧的版本(2008.9.4.0).

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

谢谢

解决方法

您需要进行一些更改才能使此示例编译并运行内置版本的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();
    }
}

原文地址:https://www.jb51.cc/csharp/243439.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐