• 概念帖——core下的ioc


    早几年面试时,面试官经常问我依赖注入的概念,但有面试官自己都不是很清楚ioc和di的区别,而是草草归于一类,今天翻了翻以前写的demo,顺便把这部分概念整理出来,加深一下印象。

    先科普一下,IOC是什么

    IOC(Inversion of Control)又称控制反转,它并不是指某种技术实现,而是OOP的一种设计原则。

    这个概念基础不牢靠的同学很多都是和DI混淆的,包括我曾经遇到几个面试官也是这样(面试过程极其尴尬),这里着重强调。

    为什么叫控制反转?传统程序设计中,我们经常使用 new 创建对象,这种做法是我们主动去创建依赖对象,可以理解为“正转”。

    如果把创建对象(new)的操作移交给某个程序(IOC容器)来控制,就理解为“反转”。也就是说,就是把创建对象交给IOC容器去做,将控制权反转给IOC容器。

    什么是DI

    DI(Dependency Injection)又称依赖注入,是IOC的一种实现方式。

    言简意赅的讲,由容器动态创建依赖关系并注入到组件中去。依赖注入并不能给程序带来更多功能,却可以提升组件重用率、系统可扩展性,让程序更灵活。

    .Net Core的实现

    net core自带IOC容器(也许你听过这一句:一切皆注入),只需要简单配置即可使用。

    先新建一个core项目,然后编写接口和实现类:

    public interface IProduct
    {
        void Get();
    }
        
    public class Product : IProduct
    {
        public void Get()
        {
             throw new NotImplementedException();
        }
    }

    之后进入Startup进行配置:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddTransient<IProduct, Product>();
    } 

    接下来是代码环节:

    public class Test
    {
        private IProduct Pro { get; set; }
    
        public UserController(IProduct pro)
        {
            Pro = pro;
        }
    
        public void Get()
        {
            //实现
            Pro.Get();
        }
    }

    别走,还没完

    还有一个点需要注意,那就是生命周期。一般来说,既然问到了IOC,那么生命周期必然也会引出,所以一定要搞清楚。

    生命周期有三种:

    (单例模式)Singleton:首次请求创建,之后所有请求都沿用这个已创建的服务。

    (瞬态模式)Transient:每次请求都创建,上面的代码里就是这种模式。

    (作用域模式)Scoped:每次请求创建,同一个请求内不管调用多少次都只会被创建一次。

    //瞬态
    services.AddTransient<IProduct, Product>();
    
    //作用域
    services.AddScoped<IProduct, Product>();
    
    //单例
    services.AddSingleton<IProduct, Product>();
  • 相关阅读:
    Azure 媒体服务的 RTMP 支持和实时编码器
    在_Linux_中如何使用_gdb_调试_C_程序
    你刚吃的兰州牛肉面,背后就藏着大数据
    《C++覆辙录》——1.9:使用糟糕的语言
    老司机带你用MaxCompute和表格存储玩转车联网数据
    快速部署rabbitMQ教程
    《第一本Docker书(修订版)》——1.3 能用Docker做什么
    《第一本Docker书(修订版)》——第1章_简介_1.1Docker简介
    【DockerCon2017最新技术解读】Docker最新特性介绍
    【DockerCon2017最新技术解读】如何在阿里云一键部署高可用的Kubernetes集群
  • 原文地址:https://www.cnblogs.com/muchengqingxin/p/13190147.html
Copyright © 2020-2023  润新知