我正在尝试使用Caliburn Micro和Ninject框架在新的WPF项目中设置依赖注入。 不幸的是我没有成功:( 互联网上有一些实现通用Bootstrap的例子,但对我来说,通用的Bootstrap类是不可用的,因为所有这些例子都至少3年了,我猜它们已经被弃用了......
我尝试的是以下内容:
public class CbmBootstrapper : BootstrapperBase
{
private IKernel kernel;
protected override void Configure()
{
this.kernel = new StandardKernel();
this.kernel.Bind<IAppViewModel>().To<AppViewModel>();
}
}
在App.xaml中
<Application x:Class="CBMExample.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:local="clr-namespace:CBMExample"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary>
<local:CbmBootstrapper x:Key="bootstrapper" />
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
我是WPF和Ninject的新手。 你能告诉我我要改变什么吗?那么在应用程序启动时,带有相应ViewModel(AppViewModel)的View(AppView)会被加载吗?
您知道有关使用&amp;的任何最新教程吗?用Caliburn Micro设置Ninject?
答案 0 :(得分:4)
您还需要覆盖OnStartup
以显示您的根视图/视图模型:
protected override void OnStartup(object sender, System.Windows.StartupEventArgs e)
{
DisplayRootViewFor<IAppViewModel>();
}
此额外调用替换了以前的通用引导程序,并允许您在运行时为应用程序选择根视图。
您还需要覆盖GetInstance
以使Caliburn挂钩到Ninject:
protected override object GetInstance(Type serviceType, string key)
{
return container.Get(serviceType);
}
Caliburn.Micro只要需要构建一些东西就会调用它,所以这是一个一站式的注入Ninject(其他IoC容器可用!)到这个过程中。
关于最新教程;自Caliburn以来没有那么多.Micro转到版本2,但是他们的official documentation通常非常有用。
编辑:
还有一件事你需要做!确保引导程序构造函数调用Initialize
:
public CbmBootstrapper ()
{
Initialize();
}
这将使Caliburn.Micro付诸行动......