[Asp.Net Core]内置容器基本使用
Posted 厦门德仔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Asp.Net Core]内置容器基本使用相关的知识,希望对你有一定的参考价值。
内置容器基本使用
准备接口和服务
1.抽象接口
public interface ITestServiceA
void Show();
``
2.实现接口服务
```csharp
public class TestServiceA : ITestServiceA
public TestServiceA()
Console.WriteLine($"this.GetType().Name被构造。。。");
public virtual void Show()
Console.WriteLine("A123456");
传统工艺
1.为方便测试构建fifthController
2.传统工艺依赖于细节
//传统工艺依赖于细节
ITestServiceA testServiceA = new TestServiceA();
testServiceA.Show();
IOC容器IServiceCollection
.NET5是内置IOC容器的;
什么IOC?
把对象的创建统一交给第三方容器来创见;
如何使用内置IOCIServiceCollection:
第一种方式:
1.在Startup中的ConfigureServices 方法中注册服务
#region IOC注册抽象和具体的依赖关系
services.AddTransient<ITestServiceA, TestServiceA>();
#endregion
2.在需要使用的控制器中,通过构造函数,定义服务的抽象类型,作为参数,在运行时,自动得到服务的具体;
private readonly ITestServiceA _ITestServicA = null;
public FifthController(ITestServiceA iTestServicA)
_ITestServicA = iTestServicA;
3…调用服务内部的方法
public IActionResult Index()
_ITestServicA.Show();
return View();
第二种方式:
1.在Startup中的ConfigureServices 方法中注册服务
services.AddTransient<ITestServiceA, TestServiceA>();
2.在需要使用的控制器中,通过构造函数,注入IServiceProvider
private readonly IServiceProvider _ServiceProvider = null;
public FifthController(IServiceProvider serviceProvider)
_ServiceProvider = serviceProvider;
3.通过_ServiceProvider获取到服务,然后通过服务实例调用服务内部的方法
public IActionResult Index()
ITestServiceA testServiceA = (ITestServiceA)_ServiceProvider.GetService(typeof(ITestServiceA));
testServiceA.Show();
第三种方式;
@using DeZai.Net5Demo.Interface
@inject ITestServiceA iTestServiceA
@
iTestServiceA.Show();
总结
DI依赖注入:IServiceCollection支持且仅支持构造函数注入
什么是依赖注入呢?
如果对象A依赖于对象B,对象B依赖于对象C,就可以先构造对象C,然后传递给对象B,然后把对象B传
递给对象A,得到A的具体实例;
IServiceCollection可以支持无线层级的以来注入; 前提是都要先注入服务(注册抽象和具体的映射关
系)
以上是关于[Asp.Net Core]内置容器基本使用的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core Web 应用程序系列- 使用ASP.NET Core内置的IoC容器DI进行批量依赖注入(MVC当中应用)
ASP.NET Core Web 应用程序系列- 使用ASP.NET Core内置的IoC容器DI进行批量依赖注入