1、什么是依赖注入(DI)
依赖:当一个类需要另一个类协助来完成工作的时候就产生依赖,这个在开发过程中十分常见,如下图所示,这是一个依赖于抽象的例子。
注入:我们只使用依赖项,不负责创建依赖项,依赖由别人注入的过程,我们看例子,由调用者将依赖项传入。
public AccountController(ILoginServiceloginService){ _loginService = loginService;}
分setter注入和构造注入两种。上面例子就是构造注入,官方推荐构造函数注入。
控制反转(IOC):为了在业务变化的时候尽少的因修改代码造成的问题。
容器:统一管理系统中所有的依赖,负责绑定服务个实例之间的关系和获取实例,并对实例进行管理。
2、Dotnet core依赖注入(DI)
通过默认的 ServiceCollection注册(在Microsoft.Extensions.DependencyInjection命名空间下)有三个方法:
var
serviceCollection =
new
ServiceCollection()
.AddTransient<ILoginService, LoginService>()
.AddSingleton<ILoginService, LoginService>()
.AddScoped<ILoginService, LoginService>();
这个三分方法有不同的生命周期
如何替换为其他的IOC容器
Autofac是个不错的选择,.NET Core默认的实现对于一些小型的项目完全够用,甚至大型项目麻烦点也能用,但是会有些麻烦,原因在于只提供了最基本的AddXXXX方法来绑定实例关系,需要一个一个的添加。如果项目可能要添加好几百行这样的方法。