首页 / ASP.NET Core / 正文

[ASP.NET Core]ASP.NET Core应用程序开发中如何手动解决获取依赖注入(DI)的实例?

3994 发布于: 2018-11-05 读完约需4分钟

问题描述

在ASP.NET Core的应用程序开发中,依赖注入是不可回避的话题,特别是对于依赖注入的初学者来说。文本讨论如何在运行时通过ASP.NET Core内置的依赖注入框架获取依赖注入的实例。

我们假设在启动配置的依赖注入如下:

Startup.cs:

在ASP.NET Core应用程序中,Startup.cs启动文件中注入好依赖注入后我们可以通过构造器注入来获取到接口的实例,如:

上例中的_someService实例是通过构造函数来实现的依赖注入。那么,如何不通过构造函数来手动解决依赖注入而获取到接口的实例呢?类似:

方案一

在ASP.NET Core的依赖注入框架中,有一个IServiceProvider接口,它提供了一个名为GetService(Type type)的方法,我们可以通过这个方法来获取依赖的实例。

此外,IApplicationBuilderHttpContext类也提供了获取依赖服务的方法,分别为:ApplicationServicesRequestServices属性。

IServiceProvider定义的GetService(Type type)方法解决依赖服务的实例,如下:

我们还可以使用IServiceProvider的静态扩展方法,如下:

扩展方法位于命名空间Microsoft.Extensions.DependencyInjection中。

同时,我们还可以在启动类Startup.cs中使用IServiceProvider来手动解决依赖,如下:

或者使用IApplicationBuilder,如下:

如果需要在Startup.cs文件中的ConfigureServices()方法中手动解决依赖,还可以:

方案二

使用IServiceProvider接口手动解决依赖实例问题可以有多种方式,如:

Startup.ConfigureServices()方法中

Startup.Configure()方法中

使用运行时注入

通过控制器的Action注入

方案三

在控制器中使用IServiceProvider手动解决依赖。

1.首先定义服务接口,ITestService.cs

2.实现接口ITestService的类TestService.cs

3.在启动类Startup.cs中注册依赖:

4.在控制器中使用IServiceProvider手动解决依赖:

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: [.NET/C#].NET/C#应用程序开发中检测网络连接是否可用的方法有哪些,哪种方式最好呢?

下一篇: [ASP.NET Core]ASP.NET Core应用程序开发中如何开启服务端的跨域CORS配置?

本文永久链接码友网 » [ASP.NET Core]ASP.NET Core应用程序开发中如何手动解决获取依赖注入(DI)的实例?

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册