メタデータ インターフェイスと属性の基本インターフェイスがあります。
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>()
、リストに 2 つの項目が表示されます。リストを開いてその中の項目を確認すると、Plugin2 もインポートされました。ここで何が問題なのですか?IAAAMetaData
とIBMetaData
は全く別物です。IAAAMetaData
にキャストすることさえできませんIBBBMetaData
。ここで何が起こっているのか誰か説明できますか?
助けてくれてありがとう!