使用 Caliburn Micro 设置依赖注入 & Ninject
Setting up dependency injection with Caliburn Micro & Ninject
我正在尝试使用框架 Caliburn Micro 和 Ninject 在新的 WPF 项目中设置依赖项注入。
不幸的是我没有成功:(
互联网上有一些实现通用 Bootstrap 的示例,但对我来说,通用 Bootstrap class 不可用,因为所有这些示例至少已有 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) 的视图 (AppView) 吗?
您知道关于使用和设置 Caliburn Micro Ninject 的任何最新教程吗?
您还需要覆盖 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 开始行动...
我正在尝试使用框架 Caliburn Micro 和 Ninject 在新的 WPF 项目中设置依赖项注入。 不幸的是我没有成功:( 互联网上有一些实现通用 Bootstrap 的示例,但对我来说,通用 Bootstrap class 不可用,因为所有这些示例至少已有 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) 的视图 (AppView) 吗?
您知道关于使用和设置 Caliburn Micro Ninject 的任何最新教程吗?
您还需要覆盖 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 开始行动...