我正在尝试在我的WPF项目中使用Caliburn Micro内置的EventAggregator
,基于这份文档。但是文档(就像我几乎总是发现的那样)似乎不完整,即示例代码不包含所有实现要求。
特别是,在我的项目中没有使用IoC容器,我确定我缺少或错误使用了其配置的某些部分,这导致了问题。
问题:
- 在启动时,
DisplayRootViewFor
方法中出现NullReferenceException
。 - 我显然知道什么是
NullReferenceException
,但我想知道如何解决与Caliburn Micro应用程序引导程序配置相关的此特定问题(并帮助其他用户在尝试执行相同操作时可能遇到的相同问题)。
备注:
- 不可否认,我不清楚应用程序引导程序的工作原理,因为我始终发现Caliburn Micro的文档非常难以理解(与MSDN相比),而且我以前没有使用过IoC容器。
NullReferenceException
与GetInstance
重写方法相关,如果我将其注释掉,我将获得“未为此对象定义无参构造函数”异常。- 我已经尝试了这个问题中的解决方案,但似乎没有任何区别。
有人能向我解释为什么Caliburn.Micro会抛出此异常,以及我应该如何将EventAggregator
注入到我的主ViewModel中吗?(因为尝试将其作为参数传递给DisplayRootViewFor
似乎不起作用。)
我的应用程序引导程序看起来像下面这样-基于事件聚合器和简单IoC容器文档页面的组合:
public class AppBootstrapper : BootstrapperBase
{
private readonly SimpleContainer _container =
new SimpleContainer();
public AppBootstrapper()
{
Initialize();
}
protected override void Configure()
{
_container.Singleton<IEventAggregator, EventAggregator>();
}
protected override object GetInstance(Type serviceType, string key)
{
return _container.GetInstance(serviceType, key);
}
protected override IEnumerable<object> GetAllInstances(Type serviceType)
{
return _container.GetAllInstances(serviceType);
}
protected override void BuildUp(object instance)
{
_container.BuildUp(instance);
}
protected override void OnStartup(object sender, StartupEventArgs e)
{
DisplayRootViewFor<MainViewModel>();
}
}
我的MainViewModel
构造函数如下 - 为注入EventAggregator
进行设置:
public MainViewModel(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
}