改造原生DI实现属性注入
我见过的依赖注入主要有两种
.net
使用的是构造函数注入
, 将依赖显式地写在构造函数中spring
使用的是属性注入
, 将依赖使用@Autowired
标记起来
由于.net
原生的DI不支持 属性注入
, 所以打算尝试自己实现一下
思考1
正常来说, 我希望的 属性注入
在C#
中使用起来大致如下
[ApiController]
[Route("[controller]")]
public class DemoController : ControllerBase
{
[AutoInject]
public DemoService Demo { get; set; }
}
将需要自动进行注入的依赖做个标记, 然后在创建 DemoController
对象时自动对 Demo
属性进行赋值
由于没有使用 构造函数注入
, 所以我们必须将 Demo
设为 public
, 不然无法访问到对应的属性
原生DI使用 ServiceProvider
创建对象, 所以第一步我们 至少需要自定义一个 MyServiceProvider