在这里插入图片描述

前言

依赖注入的作用是改变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数据库从入门到精通》

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐