Prism:结语

news/2024/11/14 15:05:18/文章来源:https://www.cnblogs.com/zhuiyine/p/18385490

Prism:结语

prism基本功能也已经学完了,在学习过程中遇到过很多问题,其中就有一点条我就一直困惑,那就是:依赖注入

什么是依赖注入:(gpt写的)

依赖注入(Dependency Injection,简称 DI) 是一种设计模式和编程技术,用于实现控制反转(Inversion of Control,IoC)。它通过将对象的依赖项从对象内部移到外部来减少组件之间的耦合,提高代码的可维护性和可测试性。

我的理解:高层原本是依赖于低层,但是为了降低耦合性,我们常常会创建一个接口,让低层与继承这个接口,这样我们最终就是:

高层依赖于抽象,而低层去实现这个抽象

这样还是不行,因为在初始化的时候依旧会new一个对象,低层通过带抽象参数的方法注入其中,new依旧是不解耦的,这时就可以通过控制反转(IOC)去掉new关键字。

下面打个比喻:

传统:A new 一个 B ,也就是A 控制 B

使用控制反转(IOC)后:A就把这个权力反转给了这个容器(prism中注册视图、module等),当A需要B的时候,由容器把B给注入进来(不用new关键字,prism中通过构造函数的方式来注入的),这个就叫依赖注入。总的来说,控制反转与依赖注入是离不开的。

第2个困惑是Prism中注册与注入的区别:

注册 (Registration)

注册是指向依赖注入容器中添加类型及其生命周期的过程。当你注册一个类型时,你实际上是告诉容器如何创建该类型的实例以及如何管理它的生命周期。注册通常发生在应用程序启动阶段,在 Bootstrapper 类的 RegisterTypes 方法中完成。

注册的时机

  1. 初始化阶段:在应用程序启动时,通常在 RegisterTypes 方法中进行注册。
  2. 模块加载时:模块可以注册它们自己的类型和服务。

注入 (Injection)

注入是指依赖注入容器在运行时创建对象并为其注入所需依赖项的过程。依赖注入有助于降低组件之间的耦合度,使代码更加灵活和易于测试。

注入的时机

  1. 构造函数注入:最常用的方式,依赖项通过构造函数传递给对象。
  2. 属性注入:依赖项通过属性赋值。
  3. 方法注入:依赖项通过方法参数传递。

image-20240828193815002

在Prism源码中,已经提前向IOC容器注入了如下内容:

image-20240828194444509

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

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

相关文章

一个.NET开源、免费的跨平台物联网网关

前言 今天大姚给大家分享一个基于.NET开源、免费的跨平台物联网网关:IoTGateway。 项目介绍 IoTGateway是一个基于.NET6的跨平台物联网网关。通过可视化配置,轻松的连接到你的任何设备和系统(如PLC、扫码枪、CNC、数据库、串口设备、上位机、OPC Server、OPC UA Server、Mqtt…

Prism:事件聚合器

Prism:事件聚合器 Prism框架提供了一个事件聚合器,可以帮助不同模块之间进行解耦和通信。开发人员可以通过发布和订阅事件来实现模块之间的交互。 IEventAggregator松耦合基于事件通讯 多个发布者和订阅者 微弱的事件 过滤事件 传递参数 取消订阅该功能主要作用为, 事件聚合器…

博弈论算法总结

正在完善! 何为博弈论 博弈论 ,是经济学的一个分支,主要研究具有竞争或对抗性质的对象,在一定规则下产生的各种行为。博弈论考虑游戏中的个体的预测行为和实际行为,并研究它们的优化策略。 先来看一道小学就接触过的思维题 你和好基友在玩一个取石子游戏。面前有30颗石子,…

Prism:区域(Region)

Prism:区域(Region) 什么是区域? 区域 (Region) 用于实现模块化应用程序中的视图组织和管理。区域允许您在一个或多个视图容器中动态地加载和卸载视图,从而实现灵活的内容布局和管理。 区域的用途动态内容加载:您可以将不同的视图加载到同一个区域中,这样可以实现在运行时动…

idea import配置

简介 本文记录idea中import相关配置:自动导入依赖、自动删除无用依赖、避免自动导入*包 自动导入依赖在编辑代码时,当只有一个具有匹配名称的可导入声明时,会自动添加导入File -> Settings -> Editor -> General -> Auto Import 勾选Add unambiguous imports on…

【ROS教程】安装ROS全流程及可能遇到的问题

@目录1.配置Softerware & Updates2.添加软件源3.设置key4.更新并安装4.1 更新4.2 安装(ros-noetic-desktop-full)4.2.1 安装aptitude4.2.2 安装ROS软件包5.添加环境变量6.安装构建依赖7.初始化和更新7.1 初始化7.1.1 目前可行的解决办法:重新定位资源7.1.2 结果7.2 更新1.…

table 固定标题的方法(tr标签)

<!DOCTYPE html> <html> <head> <title>带有额外列的表格示例</title> <style> /* 可选的CSS,用于美化表格 */ table { width: 100%; border-collapse: collapse; } th, td { border: 1px solid black; padding: 8px; tex…

CTF—Crypto基础

一:常见编码类型 1、ASCII编码 (1)特征:在线网址http://www.mokuge.com/tool/asciito16/ 2、base家族编码 (1)base64编码 特点:由A-Z,a-z,0-9,+,/64个可见字符组成、==符号作为后缀填充、不属于编码字符;一般情况下密文尾部会有两个==符号,并且有大写字母和小写字母…

光之大陆

题目求的就是点仙人掌的数量;点仙人掌的所有环缩点之后就变成了一棵树,于是考虑无根树的数量怎么求,很显然利用Prufer序列就好了;然后考虑怎么将Prufer序列移植到点仙人掌上面,此时就要利用扩展Prufer序列 扩展Prufer序列:对于一个点仙人掌来说,先将所有环缩点变成一棵树…

Maui Blazor Windows 显示本地图片新方法更简单快速 支持.Net 8.0 最新版本

目前仅Windows平台测试,安卓平台暂不支持,调用 AppDomain.CurrentDomain.BaseDirectory,直接储存图片到wwwroot里的images文件夹内,在razor里直接使用<img src="images/图片路径" />即可private void SetAvarta(){MainThread.BeginInvokeOnMainThread(asyn…

laravel用AetherUpload实现大文件上传,并更改默认上传目录

github地址:https://github.com/peinhu/AetherUpload-Laravel 实现在laravel进行大文件、分片上传,可以用来传视频1.首先用composer安装,切换到 laravel 项目根目录,执行 composer require peinhu/aetherupload-laravel dev-master 2.在 config/app.php 的 providers 数组中…

【Unity】经典四叉树的实现以及和无空间划分加速下的效率对比分析

背景 假如场景中存在大量的对象,需要快速找到某个范围内的所有对象,如果通过传统的方式,就需要对所有的物体遍历,依次判断是否在范围中,这样非常耗时。所以通过空间划分的方法将其加速,本文中采用四叉树的方式,从实现思想和代码层面对效率进行分析。 思想 在空间划分算法…