【WPF】Prism学习(六)

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许可证。

相关链接

相关推荐
北山有鸟18 分钟前
修改源码法和插件法
嵌入式硬件·学习
richxu2025100120 分钟前
嵌入式学习之路->stm32篇->(14)通用定时器(上)
stm32·单片机·嵌入式硬件·学习
qeen8744 分钟前
【数据结构】建堆的时间复杂度讨论与TOP-K问题
c语言·数据结构·c++·学习·
lizhihai_991 小时前
股市学习心得-六张分时保命图
大数据·人工智能·学习
nashane2 小时前
HarmonyOS 6学习:应用签名文件丢失处理与更新完全指南
学习·华为·harmonyos·harmonyos 5
@codercjw2 小时前
公差的具体标注方法(书本上/理论上标注方法)
学习
久菜盒子工作室3 小时前
时寒冰:第五次产业大转移与未来30年国运:在“双向挤压”中实现惊险一跃
人工智能·学习
Amazing_Cacao4 小时前
CFCA精品可可产区认证课程风土解析(美洲):打破风味堆叠的假象,建立时间轴上的层次展开阅读系统
学习
永远不会的CC4 小时前
浙江华昱欣实习(4月23日~ 4月19日)
后端·学习
爱上好庆祝4 小时前
学习js的第五天
前端·css·学习·html·css3·js