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。
答案 0 :(得分:0)
不,没有办法做到这一点。
正如您在documentation中所读到的那样,使用[ImportingConstructor]
属性修饰的.ctor将使用其参数作为导入。必须根据您选择提供的默认政策或属性(例如[ImportMany]
或[Import(AllowDefault=true)]
)来满足每次导入。
因此,您无法根据需要使用.ctor参数,它们会被“保留”用于导入。