.NET Core服务注册与控制器注入

在 .NET Core 中注册服务并将其注入到控制器的步骤如下:


1. 创建服务接口和实现类

假设有一个简单的服务:

// 定义接口
public interface IMyService
{
    string GetMessage();
}

// 实现接口
public class MyService : IMyService
{
    public string GetMessage()
    {
        return "Hello from MyService!";
    }
}

2. 注册服务到依赖注入容器

.NET Core 3.1/5/6/7/8 中,服务通常在 Program.cs(.NET 6+)或 Startup.cs(.NET 5 及更早)中注册。

如果是 .NET 6+(使用 Program.cs
var builder = WebApplication.CreateBuilder(args);

// 注册服务(示例为 Scoped 生命周期)
builder.Services.AddScoped<IMyService, MyService>();

var app = builder.Build();
// ... 其他中间件配置
如果是 .NET Core 3.1/5(使用 Startup.cs
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // 注册服务
        services.AddScoped<IMyService, MyService>();
        services.AddControllers();
    }

    public void Configure(IApplicationBuilder app)
    {
        // ... 中间件配置
    }
}

3. 将服务注入控制器

通过构造函数注入服务到控制器:

[ApiController]
[Route("api/[controller]")]
public class MyController : ControllerBase
{
    private readonly IMyService _myService;

    // 通过构造函数自动注入服务
    public MyController(IMyService myService)
    {
        _myService = myService;
    }

    [HttpGet]
    public IActionResult Get()
    {
        var message = _myService.GetMessage();
        return Ok(message);
    }
}

4. 服务生命周期选项

注册服务时需选择合适的生命周期:

  • Transient:每次请求时创建新实例。
    builder.Services.AddTransient<IMyService, MyService>();
    
  • Scoped:每个请求内共享一个实例(默认推荐)。
    builder.Services.AddScoped<IMyService, MyService>();
    
  • Singleton:全局单例,整个应用生命周期内共享。
    builder.Services.AddSingleton<IMyService, MyService>();
    

5. 其他注入方式

方法注入(不推荐,仅特定场景使用)

在 Action 方法中通过 [FromServices] 直接注入:

[HttpGet]
public IActionResult Get([FromServices] IMyService myService)
{
    return Ok(myService.GetMessage());
}

总结

  1. 定义服务接口和实现类
  2. Program.csStartup.cs 中注册服务,选择适当的生命周期。
  3. 通过构造函数将服务注入控制器,由框架自动解析依赖。

这种方式遵循依赖注入(DI)原则,使代码更可测试、松耦合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jingzhi. Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值