我正在使用MEF作爲項目導入插件,因爲插件是用WPF編寫的,它們都有一個視圖和一個視圖模型。插件知道視圖模型,但主外殼UI將構造視圖並使用約定通過配置類型模式綁定視圖模型。Type.GetType在使用MEF時返回null
我已經使用一些代碼從建立你自己的MVVM框架樣本做自動視圖發現:
[ImportMany(typeof(IPlugin))]
public IEnumerable<IPlugin> Plugins { get; set; }
var viewTypeName = this.Plugins.First().ViewModel.GetType().AssemblyQualifiedName.Replace("Model", string.Empty);
var viewType = Type.GetType(viewTypeName,true);
此刻的代碼只是獲取第一個插件,並從取出Model
該名稱,返回視圖名稱並獲取視圖類型,以便我可以構造它。那麼什麼viewType將是一個例子是:
PluginTest.TestView, PluginTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
然而,當我打電話Type.GetType(viewType)
我回來空,如果我添加了true
拋出一個例外,我得到異常:
Could not load file or assembly 'PluginTest, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null' or one of its dependencies.
The system cannot find the file specified.
即使它已經使用MEF加載。
如果我做的:
var types = Assembly.GetAssembly(this.Plugins.First().ViewModel.GetType()).GetTypes();
我回來在插件的程序集中的所有類型的列表,到目前爲止還只是PluginTest.TestView
和PluginTest.TestViewModel
誰能幫我這一個?
編輯:對不起,之前沒有提到,插件是在不同的程序集到我的主殼程序。
它似乎仍然返回null hmmm .. – 2010-06-29 05:58:40
@Nathan:那麼當您嘗試上述代碼時,「viewTypeName」是什麼? – 2010-06-29 06:14:02
ahh沒有抱歉,它的工作原理:)你有沒有modelType.FullName那裏我發誓它是modelType.Name這就是爲什麼我的代碼沒有工作。謝謝。 – 2010-06-29 06:16:51