日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# WPF MVVM开发框架Caliburn.Micro自定义引导程序④

發布時間:2023/12/4 C# 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# WPF MVVM开发框架Caliburn.Micro自定义引导程序④ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

01

自定義引導程序

在上一部分中,我們討論了Caliburn.Micro WPF應用程序的最基本配置,并演示了與操作和約定相關的兩個簡單功能。在這一部分中,我想進一步探討Bootstrapper類。讓我們首先將應用程序配置為使用IoC容器。本例中我們將使用內置容器,但是Caliburn.Micro可以很好地處理任何容器。首先,繼續學習第1部分的代碼。我們將以此為出發點。現在,讓我們創建一個名為SimpleBotstrapper的新引導程序。使用以下代碼:

using System; using System.Collections.Generic; using System.Reflection; using System.Windows;public class SimpleBootstrapper : BootstrapperBase {private SimpleContainer container;public SimpleBootstrapper(){Initialize();}protected override void Configure(){container = new SimpleContainer();container.Singleton<IWindowManager, WindowManager>();container.Singleton<IEventAggregator, EventAggregator>();container.PerRequest<ShellViewModel>();}protected override object GetInstance(Type service, string key){return container.GetInstance(service, key);}protected override IEnumerable<object> GetAllInstances(Type service){return container.GetAllInstances(service);}protected override void BuildUp(object instance){container.BuildUp(instance);}protected override void OnStartup(object sender, StartupEventArgs e){DisplayRootViewFor<ShellViewModel>();}protected override IEnumerable<Assembly> SelectAssemblies(){return new[] { Assembly.GetExecutingAssembly() };} }

這就是使用內置容器的所有代碼。首先,我們重寫引導程序類的Configure方法。這使我們有機會設置IoC容器,并執行我們可能希望執行的任何其他框架配置,例如定制約定。這里我們創建SimpleContainer并添加WindowManager和EventAggregator,當然還有ShellViewModel,但不是ShellView,因為我們有Assembly.Source.Instance。那么,什么是AssemblySoure.Instance?這是Caliburn.Micro查找視圖的地方。您可以在應用程序期間的任何時候將程序集添加到此中,以使它們可用于框架,但在引導程序中也有一個特殊的位置來執行此操作。只需像這樣覆蓋SelectAssembly:

protected override IEnumerable<Assembly> SelectAssemblies() {return new[] {Assembly.GetExecutingAssembly()}; }

您所要做的就是返回一個可搜索程序集的列表。默認情況下,基類返回應用程序所在的程序集。因此,如果您的所有視圖都與應用程序位于同一個程序集中,您甚至不必擔心這一點。如果有多個包含視圖的引用部件,則需要記住這是一個擴展點。此外,如果您正在動態加載模塊,則需要確保在加載模塊時,它們已在IoC容器和AssemblySource.Instance中注冊。

創建容器并為其提供目錄后,我確保添加一些特定于Caliburn.Micro的服務。該框架提供了IWindowManager和IEventAggregator的默認實現。這些是我可能依賴于其他地方的部分,所以我希望它們可以用于注入。我還注冊了容器本身(只是個人喜好)。

配置完容器后,我們需要告訴Caliburn.Micro如何使用它。這就是后面三個覆蓋的目的。框架需要“GetInstance”和“getAllInstance”。“構建”可選擇性地用于向框架執行的IResult實例提供屬性依賴關系。

最后,確保更新App.xaml并將HelloBootstrapper更改為SimpleBootstrapper。就這樣!您可以啟動并運行MEF,還可以處理引導程序的其他一些關鍵擴展點。

當然,只要提供“GetInstance”和“GetAllInstances”的實現,就可以使用所需的任何IoC容器。

02

給智者的話

雖然Caliburn.Micro確實通過引導程序的覆蓋和IoC類提供ServiceLocator功能,但您應該避免在應用程序代碼中直接使用它。ServiceLocator被許多人認為是一種反模式。從容器中提取往往會模糊依賴代碼的意圖,并可能使測試更加復雜。

除了上面顯示的內容之外,在引導程序上還有一些其他值得注意的方法。您可以分別在應用程序啟動或關閉時重寫OnStartup和OnExit以執行代碼,也可以在應用程序代碼未專門處理的任何異常之后重寫OnUnandledException以清除。

03

v4.0更改

在4.0中,引導程序看到了一些變化,即DisplayRootViewFor方法返回任務,可以等待它們。

protected Task DisplayRootViewFor<TViewModel>(IDictionary<string, object> settings = null) {return DisplayRootViewForAsync(typeof(TViewModel), settings); }

在Office和WinForms應用程序中使用Caliburn.Micro

可以從非Xaml主機使用Caliburn.Micro。為了實現這一點,您必須遵循稍微不同的過程,因為您的應用程序不是通過App.xaml啟動的。相反,通過繼承BoostrapperBase(非通用版本)來創建自定義boostrapper。繼承時,應將“false”傳遞給基構造函數的“useApplication”參數。這允許引導程序在不存在Xaml應用程序實例的情況下正確配置Caliburn.Micro。啟動框架所需要做的就是創建引導程序的實例并調用Initialize()方法。一旦類被實例化,您就可以像普通一樣使用Caliburn.Micro,可能通過調用IWindowManager來顯示新的UI。

04

最后

原文標題:Caliburn.Micro Xaml made easy

原文鏈接:https://caliburnmicro.com/documentation/bootstrapper

翻譯:dotnet編程大全

C#技術群?:?添加小編微信mm1552923,備注:進群!

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的C# WPF MVVM开发框架Caliburn.Micro自定义引导程序④的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。