问题描述
在ASP.NET Core的应用程序开发中,依赖注入是不可回避的话题,特别是对于依赖注入的初学者来说。文本讨论如何在运行时通过ASP.NET Core内置的依赖注入框架获取依赖注入的实例。
我们假设在启动配置的依赖注入如下:
Startup.cs:
在ASP.NET Core应用程序中,Startup.cs
启动文件中注入好依赖注入后我们可以通过构造器注入来获取到接口的实例,如:
上例中的_someService
实例是通过构造函数来实现的依赖注入。那么,如何不通过构造函数来手动解决依赖注入而获取到接口的实例呢?类似:
方案一
在ASP.NET Core的依赖注入框架中,有一个IServiceProvider
接口,它提供了一个名为GetService(Type type)
的方法,我们可以通过这个方法来获取依赖的实例。
此外,IApplicationBuilder
和HttpContext
类也提供了获取依赖服务的方法,分别为:ApplicationServices
,RequestServices
属性。
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
手动解决依赖:
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册