- 过程
- 定义依赖关系(定义当前调用者需要注入哪些对象)
- 通过构造函数注入
- 比如angular和ASP.NET Core,可以在使用者的构造函数的参数列表中定义依赖哪些类
- 不论是angular/nodejs/ASP.NET,现在流行的现代的注入方式,都是通过构造函数中定义的参数列表来一层层自动注入
- 通过成员变量注入
- 比如Spring,可以在调用者的类定义中,通过@Autowire定义哪些成员对象是需要被注入的
- 在某些地方定义一些接口在实际使用时,应该注入什么对象实例
- Spring中,在Config类中,通过命名等匹配方式,定义应该注入什么对象及其构造过程
- ASP.NET Core中,在Startup.cs的ConfigureServices()中,通过services.Add Singleton(),services.AddTransient()等定义注入(注入Swagger等第三方库,底层其实也是调的这两个函数)。
- Angular中,所有的Service类都默认作为可注入的对象,只要在调用者的构造函数中指明注入即可
- 入口
- 调用接口时注入
- 程序启动时注入。
- Spring
- 可以通过@Component+@Scheduled指定开机启动的定时任务
- 其中可以调用通过@Service+@Async定义的异步任务
- ASP.NET Core
- 实现IHostedService接口,并在Startup.cs的ConfigureServices()中,通过services.AddHostedService()定义注入。
- 在Startup.cs的Configure()参数列表中列出。当然,如果该类中定义了Start函数(比如message queue的consumer),那么还是要在注入实例后调用一下的。