.NET 6 ASP.NET Core API 项目依赖注入一个全局对象,确保全局只实例化一次,调用的都是此实例化的对象

在.NET 6中,实现全局单例服务的方法是通过内置在ASP.NET Core中的依赖注入(DI)容器来完成的。DI容器负责创建和管理服务的实例,包括控制它们的生命周期。对于单例服务,DI容器将确保在应用程序的整个生命周期内只创建服务的一个实例,并且所有对该服务的请求都会返回这个单一的实例。

以下是如何在.NET 6 ASP.NET Core应用程序中注册和使用全局单例服务的步骤:

  1. 定义服务类
    首先,你需要定义一个服务类,该类将作为单例被实例化。
public class MySingletonService
{
    public MySingletonService()
    {
        // 构造函数逻辑(如果需要的话)
    }

    // 服务的方法和属性
}
  1. 在DI容器中注册服务
    接下来,在应用程序的启动代码中(通常在Program.cs文件中),你需要将服务注册到DI容器中,并指定其生命周期为单例。
// Program.cs
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;

var builder = WebApplication.CreateBuilder(args);

// 注册全局单例服务
builder.Services.AddSingleton<MySingletonService>();

var app = builder.Build();

// 配置中间件和路由
// ...

app.Run();

在上面的代码中,AddSingleton<MySingletonService>()方法告诉DI容器MySingletonService应该被当作单例来处理。

  1. 使用服务
    现在,你可以在任何需要通过构造函数注入的地方使用这个单例服务。例如,在一个控制器或中间件中:
public class MyController : ControllerBase
{
    private readonly MySingletonService _mySingletonService;

    public MyController(MySingletonService mySingletonService)
    {
        _mySingletonService = mySingletonService;
    }

    // 控制器方法
}

或者在一个中间件中:

public class MyMiddleware
{
    private readonly RequestDelegate _next;
    private readonly MySingletonService _mySingletonService;

    public MyMiddleware(RequestDelegate next, MySingletonService mySingletonService)
    {
        _next = next;
        _mySingletonService = mySingletonService;
    }

    // 中间件的Invoke方法
}

当你运行应用程序时,DI容器将创建MySingletonService的一个实例,并在需要时将其注入到任何请求它的组件中。由于它被注册为单例,所以无论多少次请求,都将是同一个实例。

posted @ 2024-01-23 10:21  写代码让我快乐  阅读(192)  评论(0编辑  收藏  举报