代码之家  ›  专栏  ›  技术社区  ›  SteveCl

帮助开始使用MEF

  •  13
  • SteveCl  · 技术社区  · 16 年前

    我在某个地方读到,使用MEF,我可以简单地将一个dll放到一个目录中,而我的应用程序(使用一些MEF魔法)将能够读取并执行其中的代码? 希望只有实现我定义的接口的类??

    我看了一些文件,但似乎没有什么是我要找的,它的棘手时,我不知道确切地搜索什么。。。

    谢谢 S

    5 回复  |  直到 16 年前
        1
  •  6
  •   Daniel Plaisted    16 年前

    以下是布拉德·艾布拉姆斯的两篇MEF“入门”帖子:

    请注意,这些是使用MEF的预览版本编写的,因此有一些更改。例如,AttributedAssemblyCatalog已重命名为AssemblyCatalog,AggregatingComposablePartCatalog现在是AggregatingCatalog,Silverlight上的PackageCatalog现在是DeploymentCatalog,并进行了一些其他API更改。

        2
  •  3
  •   Mark Seemann    16 年前
        3
  •  2
  •   Tim    16 年前

    您可以通过如下方式标记导入来支持“重新定位”:

    [ImportMany(AllowRecomposition=true)]
    public IMessageSender[] Senders { get; set; }
    

    但是,据我所知,这不会自动加载程序集。进入.NET4的MEF版本(我猜Preview9在complex中)似乎不会自动加载程序集。我不确定这种行为是否随着MEF的发展而改变。

    您需要添加一个FileSystemWatcher并调用Refresh(),例如在DirectoryCatalog上,并侦听一个或多个以下事件:

    catalog.Changed += new EventHandler<ComposablePartCatalogChangeEventArgs>(Catalog_Changed);
    container.ExportsChanged += new EventHandler<ExportsChangeEventArgs>(Container_ExportsChanged);
    directoryCat.Changed += new EventHandler<ComposablePartCatalogChangeEventArgs>(dCat_Changed);
    
        4
  •  1
  •   Scott Whitlock    16 年前

    demo application 使用WPF、MVVM和MEF构建(用于组合和扩展)。

        5
  •  1
  •   Brian Mains    13 年前

    This article 提供使用MEF的简单通用方法:

    1. 使用MEF的最简单方法。
    2. 如何使用MEF-fully-lazy也用于Dll加载过程。
    推荐文章