依赖注入(Dependency Injection,简称 DI)功能,使得应用程序可以更加容易地管理组件之间的依赖关系。
.NET 7 中,DI 是通过 Microsoft.Extensions.DependencyInjection 命名空间中的类和接口实现的。

依赖注入原理

依赖注入原理: 依赖注入是一种设计模式,其核心思想是将组件之间的依赖关系转移给容器,由容器负责管理和实例化这些组件。
在 .NET 7 中,DI 采用了基于构造函数注入的方式来实现依赖注入,即通过构造函数将依赖项注入到组件中。

设计模式

生命周期瞬时模式

瞬时模式(Transient)每次请求都会创建一个新的实例,这是最常用的模式。

services.AddTransient<IMyService, MyService>();

生命周期作用域模式

作用域模式(Scoped)在同一个作用域内,每次请求都会使用同一个实例。

services.AddScoped<IMyService, MyService>();

生命周期单例模式

单例模式(Singleton)整个应用程序生命周期中只会创建一个实例。

services.AddSingleton<IMyService, MyService>();

生命周期自定义模式

自定义生命周期模式允许用户通过实现自己的生命周期接口来定义自己的生命周期模式。这种模式常用于需要特殊生命周期管理的对象,例如需要在后台执行的长时间运行的任务等。用户可以实现自己的生命周期接口,并在 DI 容器中注册自己的服务。示例代码如下:

public interface IMyServiceLifetime : IDisposable
{
    void Show();
}

public class MyService : IMyServiceLifetime
{
    public void Show()
    {
        // ...
    }

    public void Dispose()
    {
        // ...
    }
}

services.AddSingleton<IMyServiceLifetime, MyService>();