我的元数据接口和属性有基本接口。
public interface IBase
{
string Name { get; }
}
public interface IAAAMetaData : IBase
{
string[] Names { get; }
}
[MetadataAttribute]
[AttributeUsage(AttributeTargets.Method)]
public class AAAMetaData : ExportAttribute, IAAAMetaData
{
public AAAMetaData(string contract)
{
Name = contract;
}
public AAAMetaData(string[] contracts)
{
Names = contracts;
}
public string Name { get; set; }
public string[] Names { get; set; }
}
public interface IBBBMetaData : IBase
{
string[] Names { get; }
}
[MetadataAttribute]
[AttributeUsage(AttributeTargets.Method)]
public class BBBMetaData : ExportAttribute, IBBBMetaData
{
public BBBMetaData(string contract)
{
Name = contract;
}
public BBBMetaData(string[] contracts)
{
Names = contracts;
}
public string Name { get; set; }
public string[] Names { get; set; }
}
这是我的插件:
[AAAMetaData("Test1")]
public void Plugin1(object sender, EventArgs e)
{
sender = "Plugin1";
}
[BBBMetaData("Test2")]
public void Plugin2(object sender, EventArgs e)
{
sender = "Plugin2";
}
现在,当我尝试获取导出时,我得到了错误的结果。这是我用来获取导出的代码:
var exports = _container.GetExports<Action<object, EventArgs>, IAAAMetaData>();
结果GetExprts<T>()
我在列表中得到了两个项目。如果我打开列表并看到其中的项目也导入了 Plugin2。这里有什么问题?IAAAMetaData
并且IBMetaData
是完全不同的东西。你甚至不能投射IAAAMetaData
到IBBBMetaData
. 谁能解释这里发生了什么?
谢谢您的帮助!