Asp.Net Core自带IOC容器ServiceCollection

1.首先 准备 两个类 一个接口来测试一下

ITest  

namespace WebApplication1_ioc.Server
{
    public interface ITest
    {
        public int show(int i);
        public int show2(int i);
    }
}
namespace WebApplication1_ioc.Server
{
    public class TestClass : ITest
    {
        public int show(int i)
        {
            return i;
        }
        public int show2(int i)
        {
            return i+1;
        }
    }
}
namespace WebApplication1_ioc.Server
{
    public class TestClass2 : ITest
    {
        public int show(int i)
        {
            return i;
        }
        public int show2(int i)
        {
            return i+3;
        }
    }
}

以上是 TestClass  和  TestClass2   都继成 ITest接口  。

2.注册 

现在我们以Core6 中 使用,首先 在Program 中注册 这两个类(Core5.0 可以在 在start.up类中ConfigureServices方法对实例进行注册)

builder.Services.AddTransient();
builder.Services.AddTransient();

3.控制器中使用 

现在说一下在控制器中的两种使用

1构造函数中使用

  public class t1Controller : ControllerBase
    {
      
        
        private readonly ITest _TestClass;


        public t1Controller(  ITest TestClass)
        {
            
            _TestClass= TestClass;  
        }

        [HttpGet(Name = "t1")]
        public int  Get()
        {

            int a = _TestClass.show(5);

            return a;
           
        }
    }

2. IServiceProvider 使用方式

 public class t2Controller : ControllerBase
    {

       
        private readonly ITest ts1;
        private readonly IServiceProvider _serviceProvider1 = null;

        public t2Controller(IServiceProvider serviceProvider)
        {
          
            _serviceProvider1 = serviceProvider;
        }

        [HttpGet(Name = "t2")]
        public int Get()
        {

           var ts2 = (TestClass2)_serviceProvider1.GetService(typeof(ITest));

            return ts2.show2(5);

        }
    }

4内置的IOC 有三种生命周期

Transient:瞬时生命周期, Transient服务在每次被请求时都会被创建一个新的对象。这种生命周期比较适用于轻量级的无状态服务。
Scoped: Scoped生命周期的服务是每次web请求被创建,局部单例对象, 在某个局部内是同一个对象(作用域单例,本质是容器单例);一次请求内是一个单例对象,多次请求则多个不同的单例对象.
Singleton: Singleton生命能够周期服务在第一被请求时创建,在后续的每个请求都会使用同一个实例。如果你的应用需要单例服务,推荐的做法是交给服务容器来负责单例的创建和生命周期管理,而不是自己来走这些事情。
 


//注入生命周期为单例的服务
builder.Services.AddSingleton();
//注入生命周期为Scoped 的服务
builder.Services.AddScoped();
//注入生命周期为瞬时的服务
builder.Services.AddTransient();

你可能感兴趣的:(c#,.NetCore,开发语言,c#)