C#控制反转的使用详解

 更新时间:2026年01月04日 10:44:10   作者:上位机马工  
控制反转是将对象的创建、依赖管理和生命周期控制从应用程序代码中转移出来,交由外部容器来管理,下面就来详细的介绍一下C#控制反转的使用,感兴趣的可以了解一下

前言

控制反转是将对象的创建、依赖管理和生命周期控制从应用程序代码中转移出来,交由外部容器来管理,这种外部容器也称为IOC容器,在C#中比较常见的IOC容器是Microsoft.Extensions.DependencyInjection

1、不使用控制反转

下面的代码违反了软件设计中” 对象的创建和使用要分离“的原则,对象创建和使用都是在MainWindow类中完成,代码耦合性很高。

  public MainWindow()
        {
            InitializeComponent();
            //非控制反转
            ICamera camera= new Camera_DaHua();
            camera.OpenCamera();
        }

2、使用控制反转

使用IOC容器Microsoft.Extensions.DependencyInjection

下面的代码中你看不到ICamera对象的创建过程,只能看到它的使用过程,因为对象的创建全部在IOC容器中实现了。

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
         
            //控制反转
            var services = new ServiceCollection();
            
            // 2. 注册服务
            services.AddScoped(typeof(ICamera ), typeof(Camera_DaHua ));
            
            // 3. 构建服务提供者,用于解析服务
            var builder = services.BuildServiceProvider();
         
            // 4. 从服务提供者中解析并使用服务
            var car2 = builder.GetService<ICamera>();
            car2.OpenCamera ();
          
        }
    }

到此这篇关于C#控制反转的使用详解的文章就介绍到这了,更多相关C#控制反转内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用C#快速搭建一个在windows运行的exe应用

    使用C#快速搭建一个在windows运行的exe应用

    这篇文章主要介绍了使用C#快速搭建一个在windows运行的exe应用,这是一个比较旧的内容,但是一直都没有空写,今天花点时间,把我掌握的C# 分享给初学的人或者感兴趣的人,希望能对你有一定帮助,感兴趣的小伙伴跟着小编一起来看看吧
    2024-07-07
  • C#获取DICOM图像像素的像素值的代码详解

    C#获取DICOM图像像素的像素值的代码详解

    DICOM即医学数字成像和通信,是医学图像和相关信息的国际标准(ISO 12052),它定义了质量能满足临床需要的可用于数据交换的医学图像格式,这篇文章主要介绍了C#获取DICOM图像像素的像素值的方法,需要的朋友可以参考下
    2024-07-07
  • C#环境下串口通信技术的技术体系与工程实践详解

    C#环境下串口通信技术的技术体系与工程实践详解

    串口通信(Serial Communication)是工业控制、嵌入式开发、物联网领域最基础也最持久的通信方式,本文系统介绍了C#环境下串口通信的核心技术与实践方案,感兴趣的小伙伴可以了解下
    2026-05-05
  • 从原理到代码详解C#解析Word表格数据的最佳实践指南

    从原理到代码详解C#解析Word表格数据的最佳实践指南

    在现代办公环境中,Word文档作为信息交换和存储的重要载体,其地位举足轻重,本文将深入探讨如何使用C#从Word文档中精确高效地提取表格数据,感兴趣的小伙伴可以了解下
    2025-11-11
  • c# 圆形识别方案和直线识别方案的参考示例

    c# 圆形识别方案和直线识别方案的参考示例

    这篇文章主要介绍了c# 圆形识别方案和直线识别方案的实现示例,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-03-03
  • C#判断一个图像是否是透明的GIF图的方法

    C#判断一个图像是否是透明的GIF图的方法

    这篇文章主要介绍了C#判断一个图像是否是透明的GIF图的方法,涉及C#针对gif图片属性的相关操作技巧,需要的朋友可以参考下
    2015-06-06
  • C#定义常量的五种常用方法

    C#定义常量的五种常用方法

    作为一名 C# 程序员,常量就像我们代码中的小伙伴,时刻陪伴着我们,在 C# 中,定义常量有几种简单而有效的方法,今天,我想和大家分享 5 种常用的常量定义方式,需要的朋友可以参考下
    2025-11-11
  • C#实现AI五子棋游戏的示例代码

    C#实现AI五子棋游戏的示例代码

    这篇文章主要为大家详细介绍了C#如何智能AI五子棋游戏中的人工下棋操作以及对应的机器操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-11-11
  • Unity使用DoTween实现抛物线效果

    Unity使用DoTween实现抛物线效果

    这篇文章主要为大家详细介绍了Unity使用DoTween实现抛物线效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • 分享我在工作中遇到的多线程下导致RCW无法释放的问题

    分享我在工作中遇到的多线程下导致RCW无法释放的问题

    最近在做项目中遇到一个问题,在调用一个类库中的方法时,出现如下异常信息:尝试释放正在使用的RCW,活动线程或其他线程上正在使用该 RCW,释放正在使用的 RCW 的尝试会导致损坏或数据丢失
    2015-12-12

最新评论