1

MetadataAttribute複数使用できるように作成しました。

[MetadataAttribute]
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class BusinessLogicMetaDataAttribute : ExportAttribute, IBusinessLogicMetaData
{
     //......
}

次に、GetExports<T>()メソッドのインポートに使用しています。

//.....
var imported = _container.GetExports<Action<object, EvantArgs>, IBusinessLogicMetaData>("myplugin");
//.....

これが私のプラグインメソッドです:

[BusinessLogicMetaData("myplugin")]
[BusinessLogicMetaData("myplugin1")]
public void Test(object sender, EventArgs e)
{
    //....
}

AlowMultiple=trueMetadataAttribute. metadataAttribute を AllowMultiple = false に設定し、プラグイン メソッドの 2 番目の属性を削除すると、問題なく動作します。

プラグイン メソッドで 2 つの属性を使用できないのはなぜですか?

助けてくれてありがとう!

4

2 に答える 2

2

デザイン全体と最終的な目標がわからないため、特定のケースで機能するかどうかはわかりませんが、メタ属性などを作成しているため、フラグ列挙型をラップできます (ビットフラグとしての列挙型を参照)。BusinessLogicMetaDataAttribute、つまり、文字列を使用する代わりに、フラグ列挙型を使用すると、以下のようにすることができます

[BusinessLogicMetaData(MyFlagEnum.myplugin | MyFlagEnum.myplugin1)]
public void Test(object sender, EventArgs e)
{
    //....
}

更新: フラグ列挙型を使用せずに複数のエクスポートを行うには、 ExportAttributeAttributeの代わりに継承します。この問題については、Web でいくつかの議論があります。

[MetadataAttribute]
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class BusinessLogicMetaDataAttribute : Attribute, IBusinessLogicMetaData
{
     //......
}
于 2013-07-23T18:34:06.470 に答える
0

私は自分の質問に答えています。MetaDataAttribute に 2 つのコンストラクターを用意することにしました。

1) 1 つの文字列パラメーターを受け取ります

2) string[] パラメータを 1 つ取ります

次に、次のようにできます。

[BusinessLogicMetaData(new string[]{"myplugin1", "myplugin2"})]
public void Test(object sender, EventArgs e)
{
    //....
}
于 2013-08-14T18:43:25.430 に答える