MEF不导入具有允许多个的属性的方法
本文关键字:许多个 属性 方法 导入 MEF | 更新日期: 2023-09-27 18:24:24
创建了允许使用多个的MetadataAttribute
。
[MetadataAttribute]
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class BusinessLogicMetaDataAttribute : ExportAttribute, IBusinessLogicMetaData
{
//......
}
那么我使用CCD_ 2来导入方法。
//.....
var imported = _container.GetExports<Action<object, EvantArgs>, IBusinessLogicMetaData>("myplugin");
//.....
这是我的插件方法:
[BusinessLogicMetaData("myplugin")]
[BusinessLogicMetaData("myplugin1")]
public void Test(object sender, EventArgs e)
{
//....
}
Get-exports没有返回插件方法,因为我的MetadataAttribute
中有AlowMultiple=true
。如果我将metadataAttribute设置为AllowMultiple=false,并删除插件方法的第二个属性,效果会很好。
为什么我的插件方法不能有两个属性?
谢谢你的帮助!
不确定它是否适用于您的特定情况,因为我不知道您的整个设计和最终目标,但由于您正在创建一个元属性等等,您可以在BusinessLogicMetaDataAttribute
中包装一个标志枚举(请参阅枚举类型为位标志),也就是说,不使用字符串,而是使用标志枚举,然后您可以像下面的一样
[BusinessLogicMetaData(MyFlagEnum.myplugin | MyFlagEnum.myplugin1)]
public void Test(object sender, EventArgs e)
{
//....
}
更新:要在不使用标志枚举的情况下进行多个导出,请从Attribute
继承,而不是从ExportAttribute继承,围绕web 有一些关于此问题的讨论
[MetadataAttribute]
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class BusinessLogicMetaDataAttribute : Attribute, IBusinessLogicMetaData
{
//......
}
我在回答我自己的问题。我决定在我的MetaDataAttribute上有两个构造函数。
1) 取一个字符串参数
2) 取一个字符串[]参数
然后我可以这样做:
[BusinessLogicMetaData(new string[]{"myplugin1", "myplugin2"})]
public void Test(object sender, EventArgs e)
{
//....
}