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自定义引导程序④相关推荐

  1. C# WPF MVVM开发框架Caliburn.Micro 自定义Conventions⑩

    处理自定义约定 虽然ViewLocator和ViewModelLocator类通过提供对每个类的NameTransformer实例的公共访问来支持非标准约定,但对于那些不熟悉正则表达式语法的人来说,添 ...

  2. C# WPF MVVM开发框架Caliburn.Micro入门介绍①

    01 - Caliburn.Micro简介 Caliburn.Micro是一套基于XAML的MVVM模式的开发框架,它小巧而强大.在CaliburnMicro中只需要按照约定把View的名字加上后缀V ...

  3. C# WPF MVVM开发框架Caliburn.Micro 关于Conventions⑧

    01 - 关于Conventions Caliburn.Micro的一个主要特性是,它能够通过一系列约定消除对锅炉铭牌代码的需求.有些人喜欢习俗,有些人讨厌习俗.这就是为什么CM的约定是完全可定制的, ...

  4. C# WPF MVVM开发框架Caliburn.Micro Screens, Conductors 和 Composition⑦

    01 - Screens, Conductors and Composition Actions, Coroutines and Conventions往往最能吸引Caliburn.Micro的注意力 ...

  5. C# WPF MVVM开发框架Caliburn.Micro快速搭建③

    01 - 启动项目 打开Visual Studio 创建一个名为"Caliburn.Micro.Hello"的新WPF应用程序 添加对Caliburn.Micro Nuget包的引 ...

  6. C# WPF MVVM开发框架Caliburn.Micro View / View Model 命名⑨

    01 - 约定 在收到Caliburn Micro中有关视图和ViewModel解析的反馈后,我们添加了新功能,以简化类型解析,同时保持驱动它的健壮的基于正则表达式的名称转换机制.为了更好地了解这些新 ...

  7. C# WPF MVVM开发框架Caliburn.Micro 名称Transformer⑩①

    使用名称Transformer NameTransformer是在Caliburn.Micro v1.1中引入的,它是ViewLocator和ViewModelLocator如何将类名映射到其伙伴角色 ...

  8. C# WPF MVVM开发框架Caliburn.Micro IResult和协同程序⑥

    " 引言部分,总领全篇文章的中心内容." 01 - IResult and Coroutines 在前面,我提到了Actions概念的另一个引人注目的特性,称为协同程序.如果你以前 ...

  9. C# WPF MVVM开发框架Caliburn.Micro常用功能指南②

    这是Caliburn.Micro项目中最常用的约定和功能的快速指南. 01 - 事件连接 这会自动将控件上的事件关联到ViewModel上的方法. 常规约定: <Button x:Name=&q ...

最新文章

  1. 清结算系统的一些思考
  2. css垂直居中如何实现
  3. 基于maven的SpringMVC+Spring+MyBatis+Log4j2的pom配置
  4. 执行点击事件,第一次点击后,一切正常,第二次点击,执行两次,以此类推
  5. 网站XML格式的网站地图(sitemap)格式
  6. Lucene中string docvalues使用utf-16的优化
  7. 黄聪:详解 ManualResetEvent(转)
  8. unity5, Configurable Joint: Anchor, Connected Anchor, Auto Configure Connected Anchor
  9. 渗透测试/应急演练过程中metasploit制作木马连接失败问题排查
  10. httpclient下载图片或者其他文件
  11. 安装“万能解码器”还原真实“解码”
  12. 大数据入门书籍推荐以及Hive学习资料
  13. 计算机无法连接打印机主机,打印机无法连接电脑问题的处理方法
  14. 苹果输入法怎么换行_朋友圈长文字不折叠输入法,复制粘贴避免只显示一行
  15. 电商营销新思路:CPS分销推广模式
  16. 破解华为电脑管家,多屏协同无法正常启动,提示 硬件解码器工作异常,请重启电脑
  17. Android KeyCode列表 input keyevent XXX
  18. 橘子学docker01之基本玩法
  19. 百面深度学习 | 第八期:物体检测模型的发展概况
  20. 软件工程师薪酬最高的25家公司!!!

热门文章

  1. sql 注入神器sqlmap 源码分析之调试sqlmap
  2. [tp3.2.1]数据模型 - 简单的模型连接
  3. javascript与xml实例应用
  4. sqlserver oracle 数据类型对应关系,SQLSERVER和ORACLE数据类型对应关系详解和对应表格整理...
  5. MySQL 实用语句集合
  6. Tabcontrol动态添加TabPage(获取或设置当前选项卡及其属性)
  7. 孤掌难鸣-------堵水眼
  8. JavaScript组件之JQuery(A~Z)教程(基于Asp.net运行环境)[示例代码下载](一)
  9. ASP.NET程序中常用的三十三种代码(二)
  10. php post 获取xml,php 获取post的xml数据并解析示例