.Net Core——IOC/DI

名词解释

说起依赖注入,很多人会想起两个词:IOC和DI。

IOC(Inversion of Control)=控制反转

DI(Dependency Injection)=依赖注入

IOC其实并不是某项具体的实现技术,它是一种思路(或者是设计理念),这一点很多有经验的同学都会搞混。如果用白话来讲,IOC就意味着把对象交给IOC容器控制,而不是在对象内部控制。简而言之就是“容器控制对象”。

套入到程序来说,我们有两个class,A、B,如果B要用到A的方法,传统的方法是在B中添加A的引用(比如new),这种就算是“正转”,但如果我们把这个过程IOC容器去控制,那就是“反转”。IOC也不能为程序带来更多功能,其主要目的是为了提升重用率、增强扩展性、降低耦合性、增强对程序设计的理解。

DI是什么呢?可以把它理解为IOC的另一种解释方式。可能是IOC的概念听起来的确云里雾里,所以有位大佬(Martin Fowler)给出了一个新的名词DI,明确指出“被注入对象依赖IoC容器配置依赖对象”,从另一个角度解释了IOC的理念。

net core的实现

net core自带ioc容器,如果你想把某个对象交给ioc容器来控制,最简单的使用方法就是在你的startup.cs中添加代码,如下:

public void ConfigureServices(IServiceCollection services)
{
    services.AddScoped<XXX>();
    services.AddTransient<XXX>();
    services.AddSingleton<XXX>();
}

在这个阶段,需要注意交给ioc容器控制的对象有三种声明周期可以选择:

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

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

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

如果需要使用被注入的对象,只需要在构造函数中添加被注入类型的对象即可,如下:

private readonly XXX _x;
public XController(XXX x)
{
    _x = x;
}

当有多个对象时如法炮制。

posted @ 2019-09-28 21:52  老马-Max  阅读(374)  评论(0编辑  收藏  举报