Mef为装配中存在的所有类组成零件

时间:2014-10-31 08:09:08

标签: c# .net mef

public class ClassMerger
{         

    [Import(typeof(ITest))]
    public ITest pTest { get; set; }

    [Import(typeof(INewTest))]
    public INewTest ObjImportClass { get; set; }

    private AggregateCatalog catalog { get; set; }
    public static CompositionContainer container { get; set; }

    public void Compose()
    {
        DirectoryCatalog dc = new DirectoryCatalog(@" Debug");
        catalog = new AggregateCatalog(dc);
        AssemblyCatalog catalog1 = new AssemblyCatalog(Assembly.GetExecutingAssembly());
        catalog.Catalogs.Add(catalog1);
        container = new CompositionContainer(catalog);             
        container.ComposeParts(catalog);
    }        
}

在上面的代码中,当我说 container.composeparts(catalog)时,我的所有接口(例如,ITest)都为空。 但是当我将其重写为 container.ComposeParts(this)时,这些部分就被组成了。如果是这样,我如何提及我的容器来为我的程序集中存在的所有类组成部件。

1 个答案:

答案 0 :(得分:2)

你得到null因为它永远不会尝试为你的类 ClassMerger 撰写,而是为 AssemblyCatalog 撰写,详细说明:

当你说 container.Composeparts(catalog); 时,你告诉MEF在 AssemblyCatalog 的实例中为装饰属性组成部分。

另一方面,当您告诉 container.ComposeParts(this); 时,您告诉MEF在类 ClassMerger 的实例上组合这些修饰属性,因此最后找到你要填写的属性。

请注意,通过 container = new CompositionContainer(目录); ,您告诉MEF 以查找可能满足您以后的部分 - 解雇 .ComposeParts ...

时加载,装饰属性