.NET依赖注入(基础)-IOC容器初体验

  1. IOC容器的两个重要包 建议通过nuget引入

Microsoft.Extensions.DependencyInjection

Microsoft.Extensions.DependencyInjection.Abstractions

  1. IOC容器的两个重要的类型

ServiceCollection 作为容器把对象类型(类型即是服务)注册进去 大白话:就是

ServiceProvider 作为类型(服务)的提供者 大白话:从集合中把对象取出的提供者

  1. 用以上两个类型的简单使用案例,直观了解ServiceCollection和ServiceProvider 的作用过程

 class TestClass
    {
        public void Main()
        {
            //先创建所有类的容器 IserviceCollection
            IServiceCollection serviceCollection = new ServiceCollection();
            //项目中可能用到的类注册进入容器,注意我使用了三个不同方法,效果不同,后面解释
            serviceCollection.AddTransient<Parent1>();
            serviceCollection.AddScoped<Parent2>();
            serviceCollection.AddSingleton<Parent3>();
            //创建对象
            ServiceProvider serviceProvider = serviceCollection.BuildServiceProvider();
            Parent1 parent1 = serviceProvider.GetService<Parent1>();
            Parent2 parent2 = serviceProvider.GetService<Parent2>();
            Parent3 parent3 = serviceProvider.GetService<Parent3>();
            parent1.DoSomethings();
            parent2.DoSomethings();
            parent3.DoSomethings();
        }
    }
    //以下为需要注册进ServiceCollection的类型
    class Parent1
    {
        public void DoSomethings()
        {
            Console.Write("我是父类1");
        }
    }
    class Parent2
    {
        public void DoSomethings()
        {
            Console.Write("我是父类2");
        }
    }
    class Parent3
    {
        public void DoSomethings()
        {
            Console.Write("我是父类3");
        }
    }

总结以上ServiceCollection和ServiceProvider的使用过程(我可能喜欢以提问的方式让你注意到某些东西)

1.ServiceCollection的作用是什么

ServiceCollection用来存放项目中的其他所有需要用到的其他类型

2.ServiceCollection存放其他类型有哪三个方法

ServiceCollection.AddTransient<T>();

ServiceCollection.AddScope<T>();

ServiceCollection.AddSingleTon<T>();

暂时不讨论这个三个方法有什么作用,目前你需要大概只要有这个三个方法存在)

3.ServiceCollection存入类型,那取出对象也是通过ServiceCollection吗

不是! 通过ServiceCollection创造出ServiceProvider,然后才能取出对象

  1. 以上知识只涉及到.NET Core为我们提供了一种全新的创造对象的模式,此中模式可以称为ServiceLocator(服务定位器)模式

  1. 类型关系图(个人向)

---预告 下篇文章主要介绍ServiceLocator模式创建对象的三种生命周期

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值