我想知道使用Import/ImportMany裝飾物有什麼好處?我和MEF一起玩,並通過CompositionContainer管理所有事情。我使用派生自ExportAttribute的自定義MetaDataAttribute來裝飾出口。當我嘗試訪問插件實例時,我可以通過Container.GetExports<T, IMetaDataAttribute>()
懶洋洋地訪問元數據和插件實現。託管擴展性框架(MEF),爲什麼需要導入?
那麼,我爲什麼需要進口的裝飾打擾?我明白MEF的核心是CompositionContainer,而這正是我應該關心的。但是網上的大多數例子都通過導入裝飾對象實例。爲什麼是這樣,他們提供什麼附加價值?
下面是我如何訪問我的元數據和實際的插件的例子:
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;
}
我缺少的東西或缺乏瞭解?請幫助我理解。因爲他們爲您提供自動的依賴注入
這就是爲什麼我很困惑。鑑於人們知道'GetExport',我沒有看到使用Imports的任何優勢。相反,Imports會引入額外的代碼中斷和其他類的機會。另外,在與Container相同的類中使用導入時,無法將包裝類設置爲靜態,這基本上意味着必須傳遞插件管理器的引用而不是使用靜態類。當然,導入可以放在一個單獨的類中,並在靜態PluginManager類中實例化並存儲爲ref。在任何情況下,我仍然看不到Imports如何幫助我。 – 2013-05-10 12:18:48
我看到你的觀點重新加入了插件之間的依賴關係,我想這就是將Unity和MEF這樣的東西結合起來的地方。謝謝你的解釋 – 2013-05-10 12:21:47