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 依赖注入

猜你喜欢

转载自blog.csdn.net/xc917563264/article/details/85454989