使用Caliburn Micro和Ninject设置依赖注入

xer*_*him 6 c# wpf dependency-injection ninject caliburn.micro

我正在尝试使用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>();
    }
}
Run Code Online (Sandbox Code Playgroud)

并在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>
Run Code Online (Sandbox Code Playgroud)

我是WPF和Ninject的新手.你能告诉我我要改变什么,以便在应用程序启动时,带有相应ViewModel(AppViewModel)的View(AppView)被加载吗?

您是否知道有关使用和设置Ninject与Caliburn Micro的最新教程?

Sim*_*wen 4

您还需要覆盖OnStartup才能显示根视图/视图模型:

protected override void OnStartup(object sender, System.Windows.StartupEventArgs e)
{
    DisplayRootViewFor<IAppViewModel>();
}
Run Code Online (Sandbox Code Playgroud)

这个额外的调用取代了之前的通用引导程序,并允许您在运行时为应用程序选择根视图。

您还需要重写GetInstance才能让 Caliburn 连接到 Ninject:

protected override object GetInstance(Type serviceType, string key)
{
    return container.Get(serviceType);
}
Run Code Online (Sandbox Code Playgroud)

当 Caliburn.Micro 需要构建某些东西时,它就会调用它,因此它是您将 Ninject(其他 IoC 容器可用!)注入到进程中的一站式商店。

至于最新的教程;自从 Caliburn.Micro 进入版本 2 以来,已经没有那么多了,但是他们的官方文档通常非常有用。

编辑:你还必须做一件事!确保您的引导程序构造函数调用Initialize

public CbmBootstrapper ()
{           
    Initialize();
}
Run Code Online (Sandbox Code Playgroud)

这将使 Caliburn.Micro 开始行动......