MEF多个实例相同的构造函数

时间:2015-09-26 08:26:50

标签: c# mef

MEF有没有办法用不同的构造函数参数创建同一个类的多个实例?

E.G。

class MefTest
{
    [Test]
    public void Test()
    {
        var aggregateCatalog = new AggregateCatalog(new TypeCatalog(typeof(MyExportType)));

        var compositionContainer = new CompositionContainer(aggregateCatalog);

        compositionContainer.ComposeExportedValue("Ctor1", "Contructor argument 1");
        compositionContainer.ComposeExportedValue("Ctor2", "Contructor argument 2");

        var exportedValues = compositionContainer.GetExportedValues<MyExportType>();

        Assert.AreEqual(2, exportedValues.Count());
    }
}

[Export]
class MyExportType
{
    internal string Name { get; set; }

    [ImportingConstructor]
    internal MyExportType([Import("Ctor1")][Import("Ctor2")]string name)
    {
        this.Name = name;
    }
}

该示例将抱怨多个ImportAttribute。

1 个答案:

答案 0 :(得分:0)

不,没有办法做到这一点。

正如您在documentation中所读到的那样,使用[ImportingConstructor]属性修饰的.ctor将使用其参数作为导入。必须根据您选择提供的默认政策或属性(例如[ImportMany][Import(AllowDefault=true)])来满足每次导入。

因此,您无法根据需要使用.ctor参数,它们会被“保留”用于导入。