使用 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 开始行动...