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

本文关键字:构造函数 实例 MEF | 更新日期: 2023-09-27 18:14:34

是否有方法为MEF创建具有不同构造函数参数的同一类的多个实例?

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

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

不行,没办法。

您可以在文档中读到,用[ImportingConstructor]属性装饰的.ctor将使用其参数作为导入。每个导入必须根据您可选提供的默认策略或属性(例如[ImportMany][Import(AllowDefault=true)])来满足。

所以你不能使用。ctor参数来满足你的需要,它们是为导入"保留"的。