Import/ImportMany 装飾の使用は何に適しているのだろうか? 私は MEF で遊んで、CompositionContainer を介してすべてを管理しました。ExportAttribute から派生したカスタム MetaDataAttribute でエクスポートを装飾しました。プラグイン インスタンスにアクセスしようとすると、メタ データとプラグインの実装に遅延アクセスできますContainer.GetExports<T, IMetaDataAttribute>()
。
では、なぜインポートの装飾を気にする必要があるのでしょうか? MEF のコアは CompositionContainer であり、それが私が本当に気にかけなければならないことだと理解しています。ただし、Web 上のほとんどの例では、装飾されたオブジェクト インスタンスをインポートします。それはなぜで、どのような付加価値を提供するのでしょうか?
メタデータと実際のプラグインにアクセスする方法の例を次に示します。
public static IEnumerable<IPluginAttributeView> GetMetaData<T>()
{
return Container.GetExports<T, IPluginAttributeView>().Select(e => e.Metadata);
}
public static T GetPlugin<T>(string pluginName) where T : class
{
var plugins = Container.GetExports<T, IPluginAttributeView>();
var pluginByName = plugins.Where(e => e.Metadata.PluginName.Equals(pluginName)).FirstOrDefault();
return pluginByName.Value;
}
私は何かを見逃していますか、それとも理解が不足していますか? 理解を助けてください。