【WPF】Prism学习(六)

news2024/11/19 6:41:27

Prism Dependency Injection

在这里插入图片描述

1.依赖注入(Dependency Injection)

1.1. Prism与依赖注入的关系

  • Prism框架一直围绕依赖注入构建,这有助于构建可维护和可测试的应用程序,并减少或消除对静态和循环引用的依赖。

1.2. Prism 7之前的依赖注入问题

  • 在Prism 7之前,Prism的依赖注入主要围绕为Prism实现的各种容器。这导致了一些问题,例如文档可能展示了如何使用一个容器进行操作,但不一定反映了你为应用程序使用的容器的适当API。

1.3. Prism 7引入的新接口

  • Prism 7引入了几个新的接口来抽象Prism对依赖注入的需求。这样做有几个好处,包括:
    • 文档将始终展示你需要做什么,而不需要关心你使用的是哪个依赖注入容器。
    • 这大大简化了需要添加到任何特定容器包中的内容。对于Prism.Forms来说,这减少了每个容器特定项目的3个类:PrismApplicationIContainerExtension的实现,以及一个扩展类来检索底层容器,以防你需要访问它未被Prism实现的API。

1.4. Prism 9的变化

  • 在Prism 9中,Prism IoC层已从Prism.Core中移除,现在独立于Prism发布。这使得我们更容易在所有支持的Prism平台(WPF、Uno Platform、.NET MAUI等)之间共享容器实现。
  • Prism 9还进行了额外的工作,以使容器更好地集成Microsoft.Extensions.DependencyInjection,并为容器作用域场景提供更好的支持,这些场景在Prism.Maui中被广泛使用。

总结来说,Prism框架通过依赖注入提供了一种构建应用程序的方式,使得应用程序更加模块化、易于测试和维护。随着Prism版本的更新,它不断改进对依赖注入的支持,使其更加灵活和易于使用。

2.使用微软的IServiceCollection

2.1. Prism 9.0与IServiceCollection的整合

  • Prism 9.0版本将容器实现从主Prism仓库中分离出来,这样做的好处是可以在不同平台之间共享容器,而不需要与Prism.Core有特定的代码耦合。

2.2. 支持.NET MAUI和Uno.Extensions

  • 通过添加对Microsoft的IServiceCollection的支持,Prism能够更好地支持.NET MAUI应用程序和Uno.Extensions使用的IHostBuilder方法。

2.3. 考虑使用Microsoft库的注册扩展

  • 当使用来自各种Microsoft库的注册扩展时,需要注意这些扩展通常是为Web应用程序量身定制的。例如,如果使用EntityFrameworkCore,DbContext的默认生命周期会被设置为Scoped(有作用域的)。

2.4. 生命周期管理的重要性

  • 对于大多数Prism应用程序,你可能希望将DbContext的生命周期设置为Transient(短暂的),因为Singleton(单例)可能会导致数据库访问问题,如果不同的视图模型或服务同时访问数据库。

2.5. 评估预构建的扩展方法

  • 建议花时间评估任何预构建的扩展方法,以确保注册的服务对于你的应用程序来说具有适当的生命周期。

3.容器(Containers)

Prism是一个流行的.NET框架,用于构建基于MVVM模式的应用程序,它支持依赖注入,这有助于构建可维护和可测试的应用程序,并减少对静态和循环引用的依赖。

  1. Prism团队提供了多个DI容器实现:Prism框架提供了几种不同的DI容器实现,这些容器实现了Prism的IoC(控制反转)抽象。

  2. 容器、可用性和备注:表格列出了几种不同的容器及其可用性和备注。
    在这里插入图片描述

    • DryIoc:这是一个开源的DI容器,可以在NuGet.org上找到,并且支持所有目标平台。

    • Grace:这是一个商业级的DI容器,需要商业许可。

    • Microsoft:这也是一个商业级的DI容器,需要商业许可。

    • Unity:这是一个开源的DI容器,但在Prism中只提供对Xamarin.Forms和WPF的遗留支持。

  3. 注意:虽然DryIoc和Unity容器可以在NuGet.org上找到,但它们仍然受到Prism许可证的约束。这意味着,即使这些容器是开源的,如果你使用它们作为Prism框架的一部分,你仍然需要拥有一个有效的Prism许可证。

相关链接

  • 介绍(Introduction)
  • 命令(Commands)
    • 命令(Commanding)
    • 复合命令(Composite Commands)
    • 异步命令(Async Commands)
    • 错误处理(Error Handling)
  • 依赖注入(Dependency Injection)
    • 依赖注入(Dependency Injection)

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

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

相关文章

多账号登录管理器(淘宝、京东、拼多多等)

目录 下载安装与运行 解决什么问题 功能说明 目前支持的平台 功能演示 登录后能保持多久 下载安装与运行 下载、安装与运行 语雀 解决什么问题 多个账号的快捷登录与切换 功能说明 支持多个电商平台支持多个账号的登录保持支持快捷切换支持导入导出支持批量删除支持…

UniAPP快速入门教程(一)

一、下载HBuilder 首先需要下载HBuilder开发工具,下载地址:https://www.dcloud.io/hbuilderx.htmlhttps://www.dcloud.io/hbuilder.html 选择Windows正式版.zip文件下载。下载解压后直接运行解压目录里的HBuilderX.exe就可以启动HBuilder。 UniApp的插件市场网址…

PyAEDT:Ansys Electronics Desktop API 简介

在本文中,我将向您介绍 PyAEDT,这是一个 Python 库,旨在增强您对 Ansys Electronics Desktop 或 AEDT 的体验。PyAEDT 通过直接与 AEDT API 交互来简化脚本编写,从而允许在 Ansys 的电磁、热和机械求解器套件之间无缝集成。通过利…

SpringBoot源码解析(四):解析应用参数args

SpringBoot源码系列文章 SpringBoot源码解析(一):SpringApplication构造方法 SpringBoot源码解析(二):引导上下文DefaultBootstrapContext SpringBoot源码解析(三):启动开始阶段 SpringBoot源码解析(四):解析应用参数args 目录…

【Linux】指令 + 重定向操作

Linux基本指令 一.Linux基本指令1.mv(重要)2.cat3.more和less(重要)4.head和tail5.date6.cal7.find(重要) 二.Linux相关知识点1. Linux系统中:一切皆文件2. 重定向操作1. 输出重定向2. 追加重定…

【精通 Readline 库】:优化 Shell 外壳程序的艺术

📃博客主页: 小镇敲码人 💚代码仓库,欢迎访问 🚀 欢迎关注:👍点赞 👂🏽留言 😍收藏 🌏 任尔江湖满血骨,我自踏雪寻梅香。 万千浮云遮碧…

ESP-IDF VScode 项目构建/增加组件 新手友好!!!

项目构建 1.新建文件夹,同时在该文件夹内新建.c和.h文件 如图所示,在components中新建ADC_User.c、ADC_User.h、CMakeLists.txt文件。当然这里你也可以不在components文件夹内新建文件,下面会说没有在components文件夹内新建文件构建项目的方…

玩转N1盒子:速刷OpenWRT软路由系统并实现公网访问管理

文章目录 前言1. 制作刷机固件U盘1.1 制作刷机U盘需要准备以下软件:1.2 制作步骤 2. N1盒子降级与U盘启动2.1 N1盒子降级2.2 N1盒子U盘启动设置2.3 使用U盘刷入OpenWRT2.4 OpenWRT后台IP地址修改2.5 设置旁路由&无线上网 3. 安装cpolar内网穿透3.1 下载公钥3.2 …

机器学习4

九、线性回归 1、概念 假设存在多个点,需要使用一条线来保障尽量拟合这些点,寻找这条线就叫回归。 机器学习中一种有监督学习的算法,回归问题主要关注的是因变量(需要预测的值)和一个或多个数值型的自变量(预测变量)之间的关系。 2、损失函数 存…

【Java EE初阶---多线程(初阶)】初识计算机

乐观学习,乐观生活,才能不断前进啊!!! 我的主页:optimistic_chen 我的专栏:c语言 ,Java ,Java数据结构 欢迎大家访问~ 创作不易,大佬们点赞鼓励下吧~ 文章目录…

网络安全之国际主流网络安全架构模型

目前,国际主流的网络安全架构模型主要有: ● 信息技术咨询公司Gartner的ASA(Adaptive Security Architecture自适应安全架构) ● 美国政府资助的非营利研究机构MITRE的ATT&CK(Adversarial Tactics Techniques &…

生成式人工智能(AIGC)在软件开发设计模式课程教学中的应用

一、引言 软件设计模式作为软件工程领域的核心组成部分,对于提升软件系统的质量和可维护性至关重要。然而,传统的软件设计模式课程教学方法面临着诸多挑战,例如教师准备教学案例的过程繁琐,学生理解和应用具体案例难度较大&#…

丹摩征文活动|摩智算平台深度解析:Faster R-CNN模型的训练与测试实战

目录 文章前言Faster R-CNN的简介Faster RCNN的训练与测试提前准备1.1 mobaxterm(远程连接服务器)1.2 本文的源码下载 目标检测模型 Faster-Rcnn2.1云服务器平台 数据上传内置JupyterLab的使用本地连接使用DAMODEL实例获取实例的SSH访问信息通过SSH连接通…

【实用教程】如何利用 JxBrowser 在 Kotlin 中实现屏幕共享

JxBrowser是一个跨平台的 JVM 库,它允许您将基于 Chromium 的 Browser 控件集成到 Compose、Swing、JavaFX、SWT 应用程序中,并使用 Chromium 的数百种功能。为了在 Kotlin 中实现屏幕共享,我们利用了 Chromium 的 WebRTC 支持以及 JxBrowser…

无人机动力系统节能技术的未来发展趋势——CKESC电调小课堂12.1

无人机动力系统节能技术的未来发展趋势包括以下几个方面: 1. 能源类型多元化与高效化 新型电池技术的发展:锂离子电池的性能将不断提升,能量密度增加、充放电速度加快、循环寿命延长。同时,固态电池技术有望取得突破并应用于无人…

【汇编语言】数据处理的两个基本问题(二) —— 解密汇编语言:数据长度与寻址方式的综合应用

文章目录 前言1. 指令要处理的数据有多长?1.1 通过寄存器指明数据的尺寸1.1.1 字操作1.1.2 字节操作 1.2 用操作符X ptr指明内存单元的长度1.2.1 访问字单元1.2.2 访问字节单元1.2.3 为什么要用操作符X ptr指明 1.3 其他方法 2. 寻址方式的综合应用2.1 问题背景&…

【算法】【优选算法】前缀和(下)

目录 一、560.和为K的⼦数组1.1 前缀和1.2 暴力枚举 二、974.和可被K整除的⼦数组2.1 前缀和2.2 暴力枚举 三、525.连续数组3.1 前缀和3.2 暴力枚举 四、1314.矩阵区域和4.1 前缀和4.2 暴力枚举 一、560.和为K的⼦数组 题目链接:560.和为K的⼦数组 题目描述&#x…

【进阶系列】正则表达式 #匹配

正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。re模块使 Python 语言拥有全部的正则表达式功能。 一个正则表达式的匹配工具:regex101: build, test, and debug regex s "C:\\a\\b\\c" pri…

【技术解析】Dolphinscheduler实现MapReduce任务的高效管理

MapReduce是一种编程模型,用于处理和生成大数据集,主要用于大规模数据集(TB级数据规模)的并行运算。本文详细介绍了Dolphinscheduler在MapReduce任务中的应用,包括GenericOptionsParser与args的区别、hadoop jar命令参…

Debezium-MySqlConnectorTask

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 MySqlConnectorTask,用于读取MySQL的二进制日志并生成对应的数据变更事件 整体架构流程 技术名词解释 数据库模式(Database Schema) 数据库模式是指数据库中数据的组织结构和定义&…