繁体   English   中英

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

[英]MEF multiple instances same constructor

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

该示例将抱怨多个ImportAttribute。

不,没有办法。

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

因此,您无法使用.ctor参数满足您的需求,因为导入将“保留”它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM