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自定义引导程序④相关推荐
- C# WPF MVVM开发框架Caliburn.Micro 自定义Conventions⑩
处理自定义约定 虽然ViewLocator和ViewModelLocator类通过提供对每个类的NameTransformer实例的公共访问来支持非标准约定,但对于那些不熟悉正则表达式语法的人来说,添 ...
- C# WPF MVVM开发框架Caliburn.Micro入门介绍①
01 - Caliburn.Micro简介 Caliburn.Micro是一套基于XAML的MVVM模式的开发框架,它小巧而强大.在CaliburnMicro中只需要按照约定把View的名字加上后缀V ...
- C# WPF MVVM开发框架Caliburn.Micro 关于Conventions⑧
01 - 关于Conventions Caliburn.Micro的一个主要特性是,它能够通过一系列约定消除对锅炉铭牌代码的需求.有些人喜欢习俗,有些人讨厌习俗.这就是为什么CM的约定是完全可定制的, ...
- C# WPF MVVM开发框架Caliburn.Micro Screens, Conductors 和 Composition⑦
01 - Screens, Conductors and Composition Actions, Coroutines and Conventions往往最能吸引Caliburn.Micro的注意力 ...
- C# WPF MVVM开发框架Caliburn.Micro快速搭建③
01 - 启动项目 打开Visual Studio 创建一个名为"Caliburn.Micro.Hello"的新WPF应用程序 添加对Caliburn.Micro Nuget包的引 ...
- C# WPF MVVM开发框架Caliburn.Micro View / View Model 命名⑨
01 - 约定 在收到Caliburn Micro中有关视图和ViewModel解析的反馈后,我们添加了新功能,以简化类型解析,同时保持驱动它的健壮的基于正则表达式的名称转换机制.为了更好地了解这些新 ...
- C# WPF MVVM开发框架Caliburn.Micro 名称Transformer⑩①
使用名称Transformer NameTransformer是在Caliburn.Micro v1.1中引入的,它是ViewLocator和ViewModelLocator如何将类名映射到其伙伴角色 ...
- C# WPF MVVM开发框架Caliburn.Micro IResult和协同程序⑥
" 引言部分,总领全篇文章的中心内容." 01 - IResult and Coroutines 在前面,我提到了Actions概念的另一个引人注目的特性,称为协同程序.如果你以前 ...
- C# WPF MVVM开发框架Caliburn.Micro常用功能指南②
这是Caliburn.Micro项目中最常用的约定和功能的快速指南. 01 - 事件连接 这会自动将控件上的事件关联到ViewModel上的方法. 常规约定: <Button x:Name=&q ...
最新文章
- 清结算系统的一些思考
- css垂直居中如何实现
- 基于maven的SpringMVC+Spring+MyBatis+Log4j2的pom配置
- 执行点击事件,第一次点击后,一切正常,第二次点击,执行两次,以此类推
- 网站XML格式的网站地图(sitemap)格式
- Lucene中string docvalues使用utf-16的优化
- 黄聪:详解 ManualResetEvent(转)
- unity5, Configurable Joint: Anchor, Connected Anchor, Auto Configure Connected Anchor
- 渗透测试/应急演练过程中metasploit制作木马连接失败问题排查
- httpclient下载图片或者其他文件
- 安装“万能解码器”还原真实“解码”
- 大数据入门书籍推荐以及Hive学习资料
- 计算机无法连接打印机主机,打印机无法连接电脑问题的处理方法
- 苹果输入法怎么换行_朋友圈长文字不折叠输入法,复制粘贴避免只显示一行
- 电商营销新思路:CPS分销推广模式
- 破解华为电脑管家,多屏协同无法正常启动,提示 硬件解码器工作异常,请重启电脑
- Android KeyCode列表 input keyevent XXX
- 橘子学docker01之基本玩法
- 百面深度学习 | 第八期:物体检测模型的发展概况
- 软件工程师薪酬最高的25家公司!!!
热门文章
- sql 注入神器sqlmap 源码分析之调试sqlmap
- [tp3.2.1]数据模型 - 简单的模型连接
- javascript与xml实例应用
- sqlserver oracle 数据类型对应关系,SQLSERVER和ORACLE数据类型对应关系详解和对应表格整理...
- MySQL 实用语句集合
- Tabcontrol动态添加TabPage(获取或设置当前选项卡及其属性)
- 孤掌难鸣-------堵水眼
- JavaScript组件之JQuery(A~Z)教程(基于Asp.net运行环境)[示例代码下载](一)
- ASP.NET程序中常用的三十三种代码(二)
- php post 获取xml,php 获取post的xml数据并解析示例