当前位置: 首页 > news >正文

C#中的依赖注入

在这里插入图片描述

前言

依赖注入的作用是改变A、B两个对象之间的依赖关系,将B对象本来是在A中创建改成外部创建后再通过注入的方式传进来,从而实现对象之间的解耦,减少对象之间的直接依赖关系,使代码更加灵活和可维护。

1、新建一个wpf解决方案

新建一个wpf的.netframwork框架的解决方案,如下:

在这里插入图片描述

1)新建一个接口ICamera

 interface ICamera{void OpenCamera();}

2)新建一个类Camera_DaHua实现接口ICamera

 class Camera_DaHua:ICamera {public void OpenCamera(){Console.WriteLine("打开大华相机");}}

3)新建一个类Camera_HaiKang 实现接口ICamera

class Camera_HaiKang : ICamera{public void OpenCamera(){Console.WriteLine("打开海康相机");}}

4)新建一个类Run
这个Run类就是我说的依赖关系中的A,ICamera就是依赖关系中的B。

 class Run{//构造函数注入public  ICamera camera { get; set; }//无依赖注入public Run(){camera = new Camera_DaHua();}public void Test(){camera.OpenCamera();}//构造函数注入public Run(ICamera _camera){camera = _camera;}//方法注入public void SetCamera(ICamera _camera){camera = _camera;}}

1、不使用依赖注入

class Run{public  ICamera camera { get; set; }//无依赖注入public Run(){camera = new Camera_DaHua();}public void Test(){camera.OpenCamera();}}

假设我想打开大华相机,则使用如下代码就可以:

  Run run = new Run();run.Test();

假设我想打开海康相机,这时候我只能去改Run这个类,改成这样,这样做的坏处是总是去改变底层类。

class Run{public  ICamera camera { get; set; }//无依赖注入public Run(){camera = new Camera_HaiKang ();}public void Test(){camera.OpenCamera();}}

2、构造函数实现依赖注入(使用最多的注入方式)

下面的代码是使用构造函数注入的方式

class Run{public  ICamera camera { get; set; }//构造函数注入public Run(ICamera _camera){camera = _camera;}public void Test(){camera.OpenCamera();}}

打开大华相机:

  Run run = new Run(new Camera_DaHua ());run.Test();

打开海康相机:
打开海康相机时就不需要改变Run这个类,只需要改变业务逻辑层,调用Run这个类中的Test方法就可以。

 Run run = new Run(new Camera_HaiKang  ());run.Test();

3、属性实现依赖注入

class Run{public  ICamera camera { get; set; }public void Test(){camera.OpenCamera();}}

打开大华相机:通过设置Run类中camera属性来实现。

   Run run = new Run();run.camera = new Camera_DaHua();run.Test();

4、方法实现依赖注入

  class Run{public  ICamera camera { get; set; }public void Test(){camera.OpenCamera();}//方法注入public void SetCamera(ICamera _camera){camera = _camera;}}

打开大华相机:

 Run run = new Run();run.SetCamera ( new Camera_DaHua());run.Test();

马工撰写的年入30万+C#上位机项目实战必备教程(点击下方链接即可访问文章目录)

1、《C#串口通信从入门到精通》
2、《C#与PLC通信从入门到精通 》
3、《C# Modbus通信从入门到精通》
4、《C#Socket通信从入门到精通 》
5、《C# MES通信从入门到精通》
6、《winform控件从入门到精通》
7、《C#操作MySql数据库从入门到精通》

http://www.dtcms.com/a/487725.html

相关文章:

  • 石家庄专业商城网站制作wordpress 主机安装教程
  • 外贸玩具网站无锡网站制作.
  • 国密 SM3 算法详解
  • 技术解析:Cryptomator如何实现云文件透明加密——从开发视角看开源安全工具
  • AI系统源码,人工智能,图像、视频、聊天、聊天机器人
  • 网站建设布为网wordpress禁止自适应
  • WINDOWS查看FTP端口号脚本
  • 镇江市建设工程造价信息期刊电子版官方
  • C#:可选参数
  • java数据结构--认识泛型
  • 常德做网站专业公司有关网站空间不正确的说法是
  • vmware workstation 25H2 开启3D加速失败问题修复
  • 建站网站关键词优化沧州网站建设哪家专业
  • JVM类的加载
  • ui设计学习公司网站的seo优化怎么做
  • 网站开发的流程和步骤是什么免费seo网站优化
  • 分库分表下如何实现分页查询功能
  • 江苏弘盛建设工程集团有限公司网站好看企业官网源码
  • LVDS系列31:Xilinx 7系 ADC LVDS接口参考设计(二)
  • 网站建设是什么?进入百度网首页
  • 【HackTheBox】- Busqueda 靶机学习
  • 127.XIlinx fpga端的pcie(XDMA)与驱动是如何交换数据的
  • 个人网站名称怎么起济南的互联网公司有哪些
  • 在Docker中pip离线安装python的各种包
  • 建设电子商务网站的方法有?网站开发软件三剑客
  • 企业网站管理系统(多语言+多模板)
  • 设计师去哪个网站找工作wordpress linux下载
  • 机器学习入门,无监督学习之K-Means聚类算法完全指南:面向Java开发者的Python实现详解
  • Java 设计模式——代理模式:从静态代理到 Spring AOP 最优实现
  • 网站制作公司属于广告发布者吗自己买服务器搭建网站