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<ITest, TestClass>();
builder.Services.AddTransient<ITest, TestClass2>();

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<ITest, TestClass>();
//注入生命周期为Scoped 的服务
builder.Services.AddScoped<ITest, TestClass>();
//注入生命周期为瞬时的服务
builder.Services.AddTransient<ITest, TestClass2>();

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值