我目前正在使用MEF导入插件的一个项目,由于插件是用WPF编写的,每个插件都有一个视图和一个视图模型。插件知道视图模型,但主壳体UI将使用一种约定优于配置类型的模式构建视图并绑定视图模型。
我使用了Build-your-own-MVVM-framework示例中的一些代码来进行自动视图发现:
[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)
时,返回的是null。如果我添加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
。有人能帮我解决这个问题吗?
编辑:抱歉之前没有提到,插件与我的主壳体应用程序在不同的程序集中。
viewTypeName
是什么? - Jon SkeetName
,但是在发布后的30秒内就进行了编辑... - Jon Skeet