使用Caliburn Micro& amp ;;设置依赖注入Ninject

时间:2015-03-16 11:22:38

标签: 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>();
    }
}

在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?

1 个答案:

答案 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付诸行动......