依赖注入

普通写法

在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);
}
}