私はASP.NET MVC 5と共にManaged Extensibility Framework (MEF)を使用するアプリケーションを持っています。このアーキテクチャでは、複数のアプリケーションを構築して1つのマスターアプリケーションにすべて実行できるプラグイン可能な設計が可能です。また、認証と許可の検証/ロードのために1つの中心的な場所を持つことができました。C#でMEFを使用する場合、どのようにエクスポート属性のラッパーを作成できますか?
MVC 5をMEFで使用するには、各コントローラに一意のエクスポート値が必要です。したがって、私は各プラグインへの輸出額を一意にするために私のコントローラ
[Export("SomeUniqueValue1", typeof(IController))]
[PartCreationPolicy(CreationPolicy.NonShared)]
のそれぞれにこれらの2つのラインのコードを追加する必要があり、私は輸出額にプラグイン名を連結したいです。代わりに、上記の2行を使用するので、私は今、この代わりに
[Export("PluginName.SomeUniqueValue1", typeof(IController))]
[PartCreationPolicy(CreationPolicy.NonShared)]
のようなものを使用します、私は、単一のように、上記のコードの2行を排除することによって、いくつかの符号化時間を節約するために期待しています。私はその後、MefExport
クラスは、与えられた名前にプラグイン名の連結を処理すると、何とかExport
クラスを呼び出し、PartCreationPolicy
どのように作成することができます
[MefExport("SomeUniqueValue1")]
以下の行のようなものを期待していますプラグイン名を追加してExport
とPartCreationPolicy
と呼ぶことができるExport
クラスを拡張する "MefExport"クラス?
これは、私は私はあなたが合理的に一つに両方の属性を組み合わせることができるとは思わない
public class MefExport : ExportAttribute
{
public MefExport(string exportName)
{
string finalExportValue = Helpers.GetPluginName() + exportName;
new ExportAttribute(finalExportValue, typeof(IController));
}
}
Will Rayによって与えられた答えはあなたの問題の良い解決策ですが、あなたのエクスポート属性をよりわかりやすく説明することをお勧めします。 Imo、 '[MEFExport]'は '[MEFControllerExport]'や '[ControllerExport]'のような名前にすることができます。そうすれば、あとであいまいになることなくプラグインの定義を追加する余地が生まれます。 – Silvermind