C# MEF同一构造函数的多个实例
MEF有没有办法用不同的构造函数参数创建同一类的多个实例 例如C# MEF同一构造函数的多个实例,c#,mef,C#,Mef,MEF有没有办法用不同的构造函数参数创建同一类的多个实例 例如 class-MefTest { [测试] 公开无效测试() { var aggregateCatalog=newaggregateCatalog(newtypecatalog(typeof(MyExportType))); var compositionContainer=新的compositionContainer(aggregateCatalog); ComposeExportedValue(“Ctor1”、“construct
class-MefTest
{
[测试]
公开无效测试()
{
var aggregateCatalog=newaggregateCatalog(newtypecatalog(typeof(MyExportType)));
var compositionContainer=新的compositionContainer(aggregateCatalog);
ComposeExportedValue(“Ctor1”、“constructor参数1”);
ComposeExportedValue(“Ctor2”,“constructor参数2”);
var exportedValues=compositionContainer.GetExportedValues();
AreEqual(2,exportedValues.Count());
}
}
[出口]
类MyExportType
{
内部字符串名称{get;set;}
[导入构造函数]
内部MyExportType([Import(“Ctor1”)][Import(“Ctor2”)]字符串名称)
{
this.Name=Name;
}
}
该示例将抱怨多重导入属性。不,没有办法做到这一点 正如您在中所看到的,用
[ImportingConstructor]
属性修饰的.ctor将使用其参数作为导入。必须根据您可选提供的默认策略或属性(例如[ImportMany]
或[import(AllowDefault=true)]
)满足每个导入
因此,您不能根据需要使用.ctor参数,它们是为导入“保留”的
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;
}
}