我正在尝试使用 Caliburn Micro 和 Ninject 框架在新的 WPF 项目中设置依赖项注入(inject)。 不幸的是我没有成功:( 互联网上有一些实现通用 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) 吗?
您是否知道有关使用和设置 Ninject 与 Caliburn Micro 的最新教程?
最佳答案
您还需要覆盖 OnStartup
以显示您的 Root View / View 模型:
protected override void OnStartup(object sender, System.Windows.StartupEventArgs e)
{
DisplayRootViewFor<IAppViewModel>();
}
这个额外的调用取代了之前的通用 Bootstrap ,并允许您在运行时为您的应用程序选择 Root View 。
您还需要覆盖 GetInstance
以使 Caliburn Hook 到 Ninject:
protected override object GetInstance(Type serviceType, string key)
{
return container.Get(serviceType);
}
只要 Caliburn.Micro 需要构造某些东西,它就会调用它,因此它是您将 Ninject(其他 IoC 容器可用!)注入(inject)流程的一站式商店。
至于最新的教程;自从 Caliburn.Micro 进入第 2 版以来,周围就没有那么多了,但是他们的 official documentation通常非常有用。
编辑:
你还需要做一件事!确保您的 Bootstrap 构造函数调用 Initialize
:
public CbmBootstrapper ()
{
Initialize();
}
这将使 Caliburn.Micro 开始行动......
关于c# - 使用 Caliburn Micro & Ninject 设置依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29075597/