簡體   English   中英

使用Caliburn Micro和Ninject設置依賴注入

[英]Setting up dependency injection with Caliburn Micro & Ninject

我正在嘗試使用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)被加載嗎?

您是否知道有關使用和設置Ninject與Caliburn Micro的最新教程?

您還需要重寫OnStartup以顯示您的根視圖/ viewmodel:

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,但是他們的官方文檔通常非常有用。

編輯:你還有一件事要做! 確保您的引導程序構造函數調用Initialize

public CbmBootstrapper ()
{           
    Initialize();
}

這將使Caliburn.Micro付諸行動......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM