こんばんは、この複雑な作業を手伝っていただけませんか。MEFでモジュールアプリを開発しています。各モジュールには、次のようなメタデータがあります。
[MetadataAttribute]
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
public abstract class ModuleMetadata : ExportAttribute, IArmModuleMetadata
{
private ModuleDescriptor _descriptor;
public ModuleMetadata(string name, string code, string category, string iconUri)
: base()
{
_descriptor = new ModuleDescriptor(name, code, category, iconUri);
}
}
私はこのように使用します:
[Export(typeof(IArmTaskModule))]
[TaskModuleMetadata("test1", "code",
@"pack://application:,,,/WpfVisualModule;component/Icons/chart_line_error.png",
"road_weather_stations",
TargetItem = TargetItems.ControlComplex)]
class AdvancedChartContract : Burstroy.Arm.Contracts.IArmTaskModule
各モジュールには、 の Dictionary<string, Settings.ParamDescriptor> CreateSettingsBlock()
メソッドによって生成された一連のプロパティIArmModule
があります。Key にはプロパティのコードが含まれ、Value には凝った名前とデフォルト値が含まれます。
私のメインアプリではLazy<T, TMetadata>
、このようなモジュールのインポートに使用します
[ImportMany(typeof(IArmTaskModule), AllowRecomposition = true)]
private IEnumerable<Lazy<IArmTaskModule, IArmTaskModuleMetadata>> _taskModules;
メソッドから設定ブロックを受け取るLazy<T, TMetadata>
ためのインスタンスを作成するこのアプローチの問題。プロパティ情報をメタデータに追加することでそれを防ぎたいです。new List() で属性コンストラクターを拡張しようとしましたが失敗しました (属性制限)、新しい属性も作成しようとしましたIArmTaskModule
[MetadataAttribute]
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
public class ExportedParam : ExportAttribute, IArmModuleProperty
{
public ExportedParam(string code, string fancyName)
: base()
{
this.Code = code;
this.FancyName = fancyName;
//this.Value = value;
}
public string Code { get; private set; }
public string FancyName { get; private set; }
public object Value { get; private set; }
}
しかし、それも失敗しています。
[ExportedParam("a", "b")]
[ExportedParam("b", "c")]
[ExportMetadata("fffffuuu", 2)]
class MeteoSummary : IArmVisualModule,
誰か提案はありますか?