ASP.NET Core依赖注入核心组件

依赖注入核心组件

在.NET Core中DI的核心分为两个组件:IServiceCollectionIServiceProvider

IServiceCollection 负责注册

IServiceProvider 负责提供实例

 

通过IServiceCollection注册进去有三个方法:AddSingleton,AddTransient,AddScoped

这三个方法只是生命周期不同:

Transient: 每一次GetService都会创建一个新的实例

Scoped:  在同一个Scope内只初始化一个实例 ,可以理解为( 每一个request级别只创建一个实例,同一个http request会在一个 scope内)

Singleton :整个应用程序生命周期以内只创建一个实例

 

这有什么用?

如果在Mvc中用过Autofac的InstancePerRequest的同学就知道,有一些对象在一个请求跨越多个Action或者多个Service、

Repository的时候,比如最常用的DBContext它可以是一个实例。即能减少实例初始化的消耗,还能实现

跨Service事务的功能。(注:在ASP.NET Core中所有用到EF的Service 都需要注册成Scoped )

而实现这种功能的方法就是在整个reqeust请求的生命周期以内共用了一个Scope。

 

如何使用?

在Controller中使用依赖注入

一般可以通过构造函数或者属性来实现注入,但是官方推荐是通过构造函数。这也是所谓的显式依赖。

首先我们在ConfigureServices方法中注册接口和实现类:

        services.AddTransient(typeof(IFormula),typeof(MainFormula));

 

然后在Controller中的构造函数中取出这个对象,就能使用它了

       

        public IFormula _formula = null;



        public HomeController(IFormula formula)

        {

            _formula = formula;

        }

View中需要用@inject声明一下:

@inject IFormula _formula

<div>@_formula.ID</div>

参考:全面理解 ASP.NET Core 依赖注入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值