什么可以阻止MEF或Prism加载我的类型?

时间:2014-04-30 06:45:15

标签: wpf reflection mvvm prism mef

我有一个班级:

public abstract class XTimeViewModel : DevExpress.Xpf.Mvvm.ViewModelBase
{
  public bool PropertiesChanged { get; set; }

  [NotifyPropertyChangedInvocator]
  protected virtual void _onPropertyChanged(/*[CallerMemberName]*/ string propertyName = null)
  {
    PropertiesChanged = true;
    RaisePropertyChanged(propertyName);
  }
}

它包含在名为Common的程序集中。当我尝试为包含DirectoryCatalog的文件夹和其他程序集以及Common等依赖项添加DevExpress.Xpf.Mvvm.v13.2时:

var catalog = new DirectoryCatalog(unitPath, "*.dll");
AggregateCatalog.Catalogs.Add(catalog);

我得到ReflectionTypeLoadExceptionTypeLoadException说明:

  

"无法加载类型' Startup.ViewModels.ViewModel'从装配   ' G4S.XTime.Common,Version = 1.0.0.0,Culture = neutral,   公钥=空'"

我无法理解为什么MEF无法加载此类型。当我尝试示例代码时:

var asm = Assembly.LoadFrom(@"C:\Development\XTime\Startup\Units\G4S.XTime.Common.dll");
var vm = asm.GetType("G4S.XTime.Common.XTimeViewModel");

然后vm包含正确的类型,即G4S.XTime.Common.XTimeViewModel

只是预感,但我的所有已加载的模块都没有调用Initialize,我认为这个错误接近其根本原因。

如果我引用模块,并使用AssemblyCatalog加载它们,那么根本没有问题,所有工作都应该如此。什么可以将程序集移出以在运行时加载更改以阻止工作?

BTW,Common不是模块本身,而只是几个模块的依赖。

0 个答案:

没有答案