[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进行批量依赖注入

替换 ASP.NET Core 内置 DI 容器中的服务注册?

[Asp.Net Core]内置容器生命周期

[Asp.Net Core]内置容器生命周期

到 Azure ACI 的基本容器化 ASP.NET 3.1 Core 应用部署失败