ASP.NET CORE Dependency injection依赖注入

Dependency injection

IOC(控制反转)是啥? 借助第三方来实现依赖关系之间的解耦
在原来A对象获取B对象时,由主动获取一个B对象,变为了ioc主动创建一个B对象给予A。造成了A对象由主动行为变为了被动行为,则称为控制反转。(A在获得依赖对象的过程被反转了)

DI(依赖注入)又是啥?
在IOC运行期间,动态的将某种依赖关系注入到对象中。

ioc

IOC 和 DI 都是描述的同一件事情,只是通过了不同的角度来看待这个过程。

在ASP.NET CORE中提供了DI容器
自带的DI容器中提供了三种方法,分别是三种不同的生命周期
1、Transient每次调用都是不同的实例,比如常用的Microsoft.Extensions.Options.IConfigureOptions<T>;

2、Scoped每次请求是同一个实例,如 Entity Framework contexts;

3、Singleton只有一个实例,如Microsoft.Extensions.Logging.ILogger<T>;

具体使用哪种,要根据具体情况而定;

1、比如我们一般的业务逻辑都是Transient,这个也是比较常用的;

2、Scoped相对用的比较少,当然也有很多业务逻辑也有用Scoped的;当然他的妙用肯定是每次请求一个实例,比如我们在系统中获取登录系统用户的Id,这时就可以用Scoped,不管在Service层或者Repository层等等,获取的都是同一个用户;

3、Singleton很多都是系统级别设计用单利,比如日志;


使用方式
class Startup

//在Startup类的ConfigureServices方法中设置注入
 public void ConfigureServices (IServiceCollection services) {
            services.AddTransient<IService, Service> ();
        }

//使用构造函数的方式获取实例
public class ServiceController : Controller {
        private readonly IService _service;
        public ServiceController ( IService service) {
            _service= service;
        }

此外还可以用其他的容器来替换自带的DI容器 如:Autofac

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容