改造原生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