在 .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());
}
总结
- 定义服务接口和实现类。
- 在
Program.cs或Startup.cs中注册服务,选择适当的生命周期。 - 通过构造函数将服务注入控制器,由框架自动解析依赖。
这种方式遵循依赖注入(DI)原则,使代码更可测试、松耦合。

585

被折叠的 条评论
为什么被折叠?



