C# 依赖注入概念

发布时间 2023-12-16 11:04:06作者: 落花流水1173

依赖注入(Dependency Injection,DI )概念:是一种软件设计模式,也是控制反转(Inversion of Control,IOC)思想的实现方式

作用:简化模块的组装过程,降低模块之间的耦合

控制反转(Inversion of Control,IOC):“怎么创建XX对象”--->“我要XX对象”,不直接创建对象,两种实现方式:

1)服务定位器(ServiceLocator);
2)   依赖注入(Dependency Injection,DI )

如下是伪代码,不使用依赖注入:

namespace DependencyInjectionDemo
{
    public class B
    {
        public B()
        {
            A = new A();//在构造中直接new A
        }
        public A A { get; set; }
    }

    public class A
    {
        public string Name { get; set; }
    }
}

使用依赖注入伪代码:

namespace DependencyInjectionDemo
{
    public class B
    {
        private readonly A _a;

       
        public B(A a)
        {
            _a = a;//通过构造函数注入A,不直接new A
        }
    }

    public class A
    {
        public string Name { get; set; }
    }
}

 

.net中使用DI步骤:
1、安装Nuget包: Microsoft.Extensions.DependencyInjection
2、使用命名空间: Microsoft.Extensions.DependencyInjection
3、创建容器:

ServiceCollection services = new ServiceCollection();

4、在容器中注册服务的三种方式:

     (1)AddTransient:瞬态

  (2)AddScoped:范围值

     (3)AddSingleton:单例

每种方式都有多个重载方法,推荐使用接口和接口实现类进行注册,而不是使用实现类进行注册,也就是说要面向接口编程

ServiceCollection services = new ServiceCollection();
           
services.AddTransient<ITestDemo, TestDemo1>();//接口和接口实现类进行注册,TestDemo1继承于ITestDemo
services.AddTransient<TestDemo1>();//实现类进行注册

注意: 不要在长生命周期的对象中引用比它短生命周期的对象,在ASP.Net Core中,这样做默认会抛异常