Caliburn.Micro框架学习笔记——IOC配置

如果我们想要自己写的程序更加模块化,这个时候就需要考虑IOC容器注入的思维。在使用Caliburn.Micro时该如何配置?其基本步骤如下——

  1. 安装 Caliburn.Micro 包。
  2. 创建并配置 AppBootstrapper 类。
  3. 配置 App.xaml 以使用 AppBootstrapper 启动应用程序。
  4. 创建视图和视图模型。
  5. 注册服务并在视图模型中使用依赖注入。

通过这些步骤,你可以充分利用 Caliburn.Micro 提供的 IoC 和 DI 功能,简化应用程序的开发。

 具体过程

配置 Bootstrapper

Caliburn.Micro 使用一个 Bootstrapper 类来配置和启动应用程序。在这个类中,你可以设置 IoC 容器、注册服务和视图模型等。

创建一个继承自 BootstrapperBase 的类

public class AppBootstrapper : BootstrapperBase{private SimpleContainer _container;public AppBootstrapper(){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){var instance = _container.GetInstance(service, key);if (instance != null){return instance;}throw new InvalidOperationException($"Could not locate any instances of contract {service.Name}.");}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>();}}

 其中,这几个方法的作用是——

  • Configure 方法:用于配置 IoC 容器并注册服务和视图模型。
  • GetInstance 方法:用于从容器中解析实例。
  • GetAllInstances 方法:用于获取所有实例。
  • BuildUp 方法:用于构建实例。
  • OnStartup 方法:应用程序启动时显示主视图。

 配置 App.xaml

App.xaml 文件中,设置 AppBootstrapper 为启动类:

<Application x:Class="YourNamespace.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"StartupUri="AppBootstrapper.xaml"><Application.Resources></Application.Resources>
</Application>

创建相应的View和ViewModel

View

<Window x:Class="YourNamespace.ShellView"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="ShellView" Height="350" Width="525"><Grid><TextBlock Text="Hello, Caliburn.Micro!" HorizontalAlignment="Center" VerticalAlignment="Center" /></Grid>
</Window>

ViewModel

using Caliburn.Micro;namespace YourNamespace
{public class ShellViewModel : Screen{// 视图模型逻辑}
}

服务注入和使用

假设你有一个服务 IMyService 和它的实现 MyService,可以在 Configure 方法中注册它们,并在视图模型中使用它们。其中MyService继承于IMyService,然后在 AppBootstrapper 中注册服务:

protected override void Configure()
{_container = new SimpleContainer();_container.Singleton<IWindowManager, WindowManager>();_container.Singleton<IEventAggregator, EventAggregator>();_container.Singleton<IMyService, MyService>(); // 注册服务_container.PerRequest<ShellViewModel>();
}

 _container.Singleton<IMyService, MyService>(); // 注册服务

此时该服务被注册为单例的形式。

当我们想要使用时,在ViewModel中有

1)通过构造函数将这个IService类进行引入

2)使用

public class ShellViewModel : Screen
{private readonly IMyService _myService;public ShellViewModel(IMyService myService){_myService = myService;}public void ExecuteService(){_myService.DoSomething();//这个就是Iservice中的方法}
}

 以上就是通过Caliburn.Micro的IOC的步骤,仅供参考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/21142.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spoon工具的常用基础操作

一些常用转换工具 1、emp表输入->excel表输出 emp表输入&#xff0c;可以进行预览查看数据有没有过来excel表输出 成功执行后&#xff0c;可以到保存的excel位置进行查看。 2、excel输入->表输出 运行转换后可以在oracle进行查看是否有成功创建这个表 3、对部门最高…

【人工智能003】图像识别算法模型实战及经验总结(最近更新中)

1.熟悉、梳理、总结数据分析实战中的AI图像识别等实战研发知识体系&#xff0c;这块领域很大&#xff0c;需要耗费很多精力&#xff0c;逐步总结、更新到位&#xff0c;&#xff0c;&#xff0c; 2.欢迎点赞、关注、批评、指正&#xff0c;互三走起来&#xff0c;小手动起来&am…

【JAVA WEB实用与优化技巧】Maven自动化构建与Maven 打包技巧

文章目录 一、MavenMaven生命周期介绍maven生命周期命令解析 二、如何编写maven打包脚本maven 配置详解setting.xml主要配置元素setting.xml 详细配置 使用maven 打包springboot项目maven 引入使用package命令来打包idea打包 三、使用shell脚本自动发布四、使用maven不同环境配…

【协议开发系列】梳理关于TCP和UDP两种协议的区别和使用场景

起源 前二天项目上在核对外部对接服务的五元组列表的时候&#xff0c;有一位客户提问对于同样的服务同时支持tcp和udp二种方式&#xff0c;有什么优点和缺点&#xff0c;应该如何选择&#xff1f;这个问题突然让我愣了一下&#xff0c;确实好久没有“温故”了&#xff0c;相关…

商业新闻|当我们在讨论卖车时我们在讨论什么?

‍‍今天是2024年第22周 这是Yura「输出倒逼输入」计划的第10篇文章 全年进度&#xff1a;10/52 01 投资人为什么不断入局烧钱又亏损的新能源&#xff1f; 造车的烧钱速度超乎想象。除了最近的小米&#xff0c;这些年国内大大小小的玩家好像都在以不同的形式或直接或间接的参与…

【leetcode】-【javascript】

文章目录 检查是否是类的对象实例数组原型对象的最后一个元素计数器 检查是否是类的对象实例 请你编写一个函数&#xff0c;检查给定的值是否是给定类或超类的实例。 可以传递给函数的数据类型没有限制。例如&#xff0c;值或类可能是 undefined 。 示例 1&#xff1a; 输入&a…

【视频创作思维流程】教你从0培养视频创作思维

【视频创作思维流程】教你从0培养视频创作思维 1.创作认知2.培养自己的想象力2.1通过音乐辅助闭上眼睛想象2.2多看多见多模仿 3 视频脚本3.1简单的脚本3.2复杂脚本 4.拍摄预见能力4.1拍摄预见力思维用于转场4.2拍摄预见力思维给特效制作留住空间4.2拍摄预见力思维给字幕制作留住…

Web前端三大主流框架详解

Web前端三大主流框架详解 Web前端开发领域有许多框架和库可供选择&#xff0c;但其中最受欢迎的三大主流框架是 React、Vue.js 和 Angular。每个框架都有其独特的特点和优势&#xff0c;适用于不同类型的项目需求。以下是对这三大框架的详细介绍。 1. React 概述 React 是由…

src挖掘-记一次付费资源的sign绕过

0x01 前言 最近都没怎么挖到过细小的漏洞&#xff0c;一直纠结于一些比较难以实现的点&#xff0c;天天在各种测试、上线服务器里面fuzz找遗漏的点(bushi) 大概上周突破了一处付费资源免费调用&#xff0c;定级了&#xff0c;故发出来水水文 0x02 绕过过程 逛着逛着主站&…

五种最新算法求解柔性作业车间调度问题(Flexible Job Shop Scheduling Problem,FJSP),提供MATLAB代码

一、WSA求解FJSP FJSP&#xff1a;波搜索算法(Wave Search Algorithm, WSA)求解柔性作业车间调度问题&#xff08;FJSP&#xff09;&#xff0c;提供MATLAB代码-CSDN博客 二、SBOA求解FJSP FJSP&#xff1a;蛇鹫优化算法&#xff08;Secretary bird optimization algorithm&a…

模糊小波神经网络(MATLAB 2018)

模糊系统是一种基于知识或规则的控制系统&#xff0c;从属于智能控制&#xff0c;通过简化系统的复杂性&#xff0c;利用控制法来描述系统变量之间的关系&#xff0c;采用语言式的模糊变量来描述系统&#xff0c;不必对被控对象建立完整的数学模型。相比较传统控制策略&#xf…

WIN系统 -> 以太网未识别的网络问题

1.方法1 2. 3. 根据诊断提示解决问题。 方法2. 右键以太网属性

GiantPandaCV | 浅谈分辨率对模型影响以及训练方法

本文来源公众号“GiantPandaCV”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;浅谈分辨率对模型影响以及训练方法 一、前言 最近几个人在讨论模型训练的时候&#xff0c;提到了一个尺度对于模型的影响以及训练方法的收益&#…

原来有这么多sora!

原来SORA有这么多&#xff01; 作为AI模型&#xff1a;Sora是OpenAI在2024年推出的一个重要产品&#xff0c;它是继ChatGPT之后的另一力作。Sora是一个创新的文本到视频模型&#xff0c;意味着它能将用户提供的文本描述直接转换成视频内容。这个模型的特点是可以根据描述性提示…

Autosar Dem配置-手动配置DTC及使用-基于ETAS软件

文章目录 前言DemConfigSetDemDebounceCounterBasedClassDemDebounceBehaviorDemDebounceCounterDecrementStepSizeDemDebounceCounterFailedThresholdDemDebounceCounterIncrementStepSizeDemDebounceCounterJumpDownDemDebounceCounterJumpDownValueDemDebounceCounterJumpUp…

Python 初学者练习:验证哥德巴赫猜想

哥德巴赫猜想&#xff08;Goldbach’s Conjecture&#xff0c;也被称为哥德巴赫-欧拉猜想或“每个大于2的偶数都可以写成两个素数之和”&#xff09;是一个未解决的数学问题&#xff0c;尽管对于所有已经检验过的偶数都已经被验证成立&#xff0c;但我们仍然没有一个普适的证明…

操作系统|代表进程运行状态的各寄存器

本文主要资料来源于网络&#xff0c;这里只做一个简单的了解用&#xff0c;如果用错误还请读者指出指出。 在CPU架构中&#xff0c;尤其是x86架构&#xff0c;代表进程运行状态的通用寄存器包括了几个关键的寄存器&#xff0c;这些寄存器存储了与进程执行直接相关的各种信息。以…

一天挣几十元的网上兼职副业有哪些?推荐几个适合普通人做的兼职副业,有线上的也有线下的,建议收藏哦~

一天几十的兼职&#xff0c;不是几百的&#xff0c;这个会更容易实现。 相比网络上充斥着各种五花八门的兼职&#xff0c;教你轻松月入过万&#xff0c;一年几十万的...... 对于绝大多数没有一技之长的普通人&#xff0c;网络小白的话刚开始会很难的&#xff0c;慢慢来就可以…

AI+翻译 AI智能体平台扣子coze开发搭建

抖音出品的AI智能体平台&#xff0c;可以快速搭建自己的AI Agent工作流&#xff0c;并且提供了API供开发者调用 机器人Bot 工作流 官方插件 AI Agent AI 翻译 实现目的是 英译中 或 中译英&#xff0c;并生成对应的音频文件 开发智能体 创建speak工作流 > 输入 > 翻译…

Jenkins流水线pipeline--基于上一章的工作流程

1流水线部署 1.流水线文本名Jenkinsfile,将流水线放入gitlab远程仓库代码里面 2pipeline脚本 Jenkinsfile文件内容 pipeline {agent anyenvironment {key"value"}stages {stage("拉取git仓库代码") {steps {deleteDir()checkout scmGit(branches: [[nam…