首页 > 其他分享 >CommunityToolkit.Mvvm中的Ioc

CommunityToolkit.Mvvm中的Ioc

时间:2024-10-30 10:42:48浏览次数:1  
标签:CommunityToolkit Mvvm int 反转 代码 ViewModel Ioc public

什么是Ioc

在软件工程中,控制反转(IoC)是一种设计原则,其中计算机程序的自定义编写部分从外部源(例如框架)接收控制流。术语“反转”是历史性的:与过程式编程相比,具有这种设计的软件架构“反转”了控制。在过程式编程中,程序的自定义代码调用可重用库来处理通用任务,但在控制反转的情况下,是外部源或框架调用自定义代码。

在传统编程中,业务逻辑的流程是由静态绑定到彼此的对象决定的。

 

以赋值ViewModel为例,例如我有一个MainWindowViewModel,需要绑定到MainWindow的DataContext上

1 public MainWindow()
2 {
3     this.InitializeComponent();
4 
5     MainWindowViewModel viewmodel = new MainWindowViewModel();
6     this.DataContext = viewmodel ;
7 }

 

通过反转控制,流程取决于程序执行过程中建立的对象图(https://www.cnblogs.com/zhaotianff/p/17402238.html)。这种运行时绑定是通过依赖注入(Dependency Inject)或服务定位器(Service Locator)等机制实现的。

可以看到下面的代码,我们先构造一个Ser

  ///构建ServiceProvider(Service Locator)
1 private static IServiceProvider ConfigureServices() 2 { 3 var services = new ServiceCollection(); 4 5 //使用Dependency Inject 6 //注入ViewModel 7 services.AddTransient<MainWindowViewModel>(); 8 9 return services.BuildServiceProvider(); 10 }

 

此时我们可以通过ServiceLocator来获取ViewModel

1 public MainWindow()
2 {
3     this.InitializeComponent();
4     this.DataContext = App.Current.Services.GetService<MainWindowViewModel>();
5 }

 

CommunityToolkit.MVVM中的Ioc

在WPF MVVM模式中发时,使程序模块化,常用的一种形式就是Ioc(控件反转)。比较常见的就是是使用依赖注入(Dependency Inject, DI),它包括创建注入后台类的服务(即作为参数传递给ViewModel构造函数)——这使得使用这些服务的代码不依赖于这些服务的实现细节。在需要的地方注入,然后在后端代码可以使用这些功能。


CommunityToolkit.MVVM包不提供内置的Ioc框架,需要引用:Microsoft.Extensions.DependencyInjection包,它提供了一组功能齐全、功能强大的DI API,并作为一个易于设置和使用的IServiceProvider。

在后面的文章中,将会介绍这个包的使用方法。

 

Ioc和DI的区别

Ioc是一种设计原则 ,是一种思想 。

DI是一种实现方式,它可以注入后台类的服务到一个容器中,在需要使用的时候再取出来。也可以帮助我们将参数传递给构造函数。

 

在前面的示例代码中,我们注入了一个ViewModel

1 services.AddTransient<MainWindowViewModel>();

 

然后在需要使用的时候,再取出来

1 this.DataContext = App.Current.Services.GetService<MainWindowViewModel>();

 

如果我们需要将参数传递给构造函数,可以看到下面的示例代码:

以一个计算器工具为例 

我们创建了一个CalculatorService类,用于实现计算器的各个逻辑。

 1     public class CalculatorService
 2     {
 3         public int Add(int a,int b)
 4         {
 5             return a + b;
 6         }
 7 
 8         public int Sub(int a,int b)
 9         {
10             return a - b;
11         }
12     }

 

标签:CommunityToolkit,Mvvm,int,反转,代码,ViewModel,Ioc,public
From: https://www.cnblogs.com/zhaotianff/p/18515397

相关文章

  • Spring IoC & DI
     博主主页: 码农派大星.  数据结构专栏:Java数据结构 数据库专栏:MySQL数据库JavaEE专栏:JavaEE关注博主带你了解更多数据结构知识目录1.应用分层1.1如何分层:1.2MVC与三层架构区别联系2.Spring3.IoC&DI⼊⻔3.1 什么是IoC?3.2 DI介绍 4.IoC......
  • WPF+MVVM案例实战(十二)- 3D数字翻牌计时实现
    文章目录1、运行效果2、功能实现1、文件创建2、控件代码实现3、控件引用与菜单实现1.引用用户控件2.按钮菜单1、运行效果2、功能实现1、文件创建打开项目Wpf_Examples,在用户控件UserControlLib中创建NumberFoldingCard.xaml文件,在主程序......
  • AutoFac IoC DI 依赖注入
    AutoFacIoCDI依赖注入 AutoFacIoCDI依赖注入记录点点滴滴知识,为了更好的服务后来者!一、为什么使用AutoFac?之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用AutoFac的貌似更为普遍,于是捯饬了两天,发现这个东东确实是个高大上的IOC容器~Autofac是.NET领域最为流行......
  • Unity V3 初步使用 —— 为我的.NET项目从简单三层架构转到IOC做准备
    UnityV3初步使用——为我的.NET项目从简单三层架构转到IOC做准备 【前言】看过本博客的都知道(说得好像是热门博客似的,我真没法控制自己的臭美之情),本人喜欢在进入正题前总会喜欢搞点前奏,那么此文将不会再胡言乱语。马上开始。。。【Unity简介】在.NET中是一种非常流行......
  • IoC在ASP.NET Web API中的应用
    IoC在ASP.NETWebAPI中的应用 控制反转(InversionofControl,IoC),简单地说,就是应用本身不负责依赖对象的创建和维护,而交给一个外部容器来负责。这样控制权就由应用转移到了外部IoC容器,控制权就实现了所谓的反转。比如在类型A中需要使用类型B的实例,而B实例的创建并不由A来负责,......
  • 4、.Net 快速开发框架:WalkingTec.Mvvm - 开源项目研究文章
    WalkingTec.Mvvm框架(简称WTM)是一个基于.NETCore的快速开发框架,它支持Layui(前后端不分离)、React(前后端分离)、Vue(前后端分离)等多种前端UI框架,并内置了代码生成器以提高开发效率。WTM的核心特点包括:多前端UI支持:支持Layui、React、Vue等前端UI框架,满足不同开发需求......
  • 什么是依赖注入(DI)和控制反转(IOC)
    介绍依赖注入,DependencyInjection。在说明依赖注入之前,我们先描述一个场景。玩家类依赖于武器进行攻击。在传统的编程逻辑中,代码如下。可以看到,Player玩家不仅依赖于Weapon,而且还依赖于Sword。而且可以预见的是,假如Sword剑换成枪Spear,需要重新创建一个玩家类,这会导致大量的......
  • Linux驱动开发 内核时间管理 内核定时器使用 以及 从 应用层通过ioctl接口控制内核定
    Linux内核时间管理以及内核定时器使用在Linux驱动开发中,内核时间管理和内核定时器是用于管理时间和调度任务的重要工具。内核定时器允许开发者在指定的时间间隔内执行某些任务,而内核时间管理则提供了时间相关的功能,如获取当前时间、时间延迟等。1.内核时间管理内核......
  • 【Orange Pi 5 Linux 5.x 内核编程】-字符设备文件与操作(IOCTL)
    字符设备文件与操作(IOCTL)文章目录字符设备文件与操作(IOCTL)1、IOCTL介绍2、IOCTL使用步骤2.1在驱动程序中创建IOCTL命令2.2在驱动中编写IOCTL函数2.3在用户空间创建IOCTL命令3、内核空间IOCTL驱动实现4、用户空间应用程序5、验证在上一篇文章中,......
  • 《面试最爱问的Spring》- IOC启动流程,实战详解
    简介Spring作为一款经典框架,并且作为Spring家族的老大哥,也是SpringBoot,SpringCloud的一个基石,在我们工作中使用频率非常高,所以深入了解Spring的实现就很有必要。IoC(或DI)是Spring框架的核心功能之一,是Spring生态系统的基础。此处有一个很重要的容器,容器的作用:用来存储对象,Bea......