依赖注入
普通写法
在ASP.NET Core项目中一般不需要自己创建ServiceCollection、IServiceProvider。在Program.cs的builder.Build()之前向builder.Services中注入。
在Controller中可以通过构造方法注入服务。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| //控制器
[Route("[controller]/[action]")] [ApiController] public class SumController : ControllerBase {
private readonly Value value;
public SumController(Value value) { this.value = value; }
[HttpGet]
public int GetValue() { return this.value.Sum(3, 4); } }
public class Value { public int Sum(int a,int b) { return a + b; } }
|
1 2 3 4 5
| //Program.cs
builder.Services.AddScoped<Value>();
|
低使用频率的服务
可以把action用到的服务通过action的参数注入,在这个参数上标注[FromServices]。和action的其他参数不冲突。
一般不需要,只有调用频率不高并且资源的创建比较消耗资源的服务才[FromServices]。
只有action方法才能用[FromServices],普通的类默认不支持。
1 2 3 4 5 6 7 8 9
| //其余地方不变,只修改控制器即可
public class SumController : ControllerBase { [HttpGet] public int GetValue([FromServices]Value value) { return value.Sum(6, 8); } }
|