IOC简介

IOC思想

把类当做组件或服务来看待,组件内一定要高内聚,组件之间一定要低耦合,既然要保持低耦合,那就一定不要轻易的去new什么对象。
那组件之间的交互怎么处理呢?那最好的方式就是把new的操作交给第三方的治理框架去做,
比如往大处说的“Dubbo”, Spring Cloud(服务注册,服务发现,服务自动下线,流量分配,熔断,降级),往小处说就是IOC容器

把类往大处想。

把治理框架往小处想。。

IOC能做到那些

1. 对接口和实现类实现了由原来的零散式管理到现在的集中化管理。 (集中化日志,集中化配置系统 etcd,zookeeper)

new

业务驱动 IOC
产品驱动

2. 对类之间,类接口之间的关联关系可以采用多种模式注入(构造器注入,属性注入)等等。

3. 对实现类的生命周期进行了统一管理,能够控制服务的创建,释放和监控。

4. 对类的依赖由编译时推迟到了运行时。

new

.NET Core中IOC

NUGet 包 Microsoft.Extensions.DependencyInjection

Microsoft.Extensions.DependencyInjection.Abstractions(扩展)

            //IOC容器
ServiceCollection services = new ServiceCollection();
//注册服务 每次调用都创建新的类
services.AddTransient<IUserCQRS, UserCQRS>(); ////注册服务 只new一次
//services.AddSingleton<IUserCQRS, UserCQRS>(); //在某个作用于中就是一个单利
services.AddScoped<IUserCommand, UserCommand>(); //服务提供者
var serviceProvider = services.BuildServiceProvider();
var userQCRSImp = serviceProvider.GetService<IUserCQRS>();
Console.WriteLine(userQCRSImp.GetUserName("lalala")); //创建作用域 usercommand1 usercommand2 同一个实例 usercommand4 usercommand3 同一个实例
var scope1 = serviceProvider.CreateScope();
var usercommand1= scope1.ServiceProvider.GetService<IUserCommand>();
var usercommand2 = scope1.ServiceProvider.GetService<IUserCommand>(); var scope2 = serviceProvider.CreateScope();
var usercommand3 = scope2.ServiceProvider.GetService<IUserCommand>();
var usercommand4 = scope2.ServiceProvider.GetService<IUserCommand>();
  • Transient: 每一次GetService都会创建一个新的实例
  • Scoped:  在同一个Scope内只初始化一个实例 ,可以理解为( 每一个request级别只创建一个实例,同一个http request会在一个 scope内)(可以手动创建多个作用域)
  • Singleton :整个应用程序生命周期以内只创建一个实例
AOP介绍

AOP思想

我们知道AOP是面向切面编程,很好的解决了系统级的功能和业务功能的耦合问题。。。

.NETCore AOP实现

nuget包  AspectCore.Extensions.DependencyInjection    对应github地址:https://github.com/dotnetcore/AspectCore-Framework   源码中有帮助文档

他也是基于IOC容器的。

代码下载

代码下载

第三方的IOC容器都是继承了 public interface IServiceProviderFactory<TContainerBuilder>

.NET Core IOC AOP的更多相关文章

  1. Spring中三个重要概念 IOC AOP Bean

    Spring中三个重要概念 IOC AOP Bean 首先讲解一下Spring框架,以及为什么要使用Spring 框架? spring 是一个很好的容器框架, 是轻量级的IoC和AOP的容器框架,主要 ...

  2. 仿写一个简陋的 IOC/AOP 框架 mini-spring

    讲道理,感觉自己有点菜.Spring 源码看不懂,不想强行解释,等多积累些项目经验之后再看吧,但是 Spring 中的控制反转(IOC)和面向切面编程(AOP)思想很重要,为了更好的使用 Spring ...

  3. spring ioc aop 原理

    spring ioc aop 原理 spring ioc aop 的原理 spring的IoC容器是spring的核心,spring AOP是spring框架的重要组成部分. 在传统的程序设计中,当调 ...

  4. IOC AOP 设计模式

    IOC AOP 不是什么技术而是一种设计模式  学习 IOC AOP 其实是在学习一种思想. 1.IOC IOC其实是 将对象的创建和获取提取到外部.由外部IOC容器提供需要的组件. 看下面代码: p ...

  5. Spring Bean的生命周期、Spring MVC的工作流程、IOC,AOP

    1.Spring Bean的生命周期? (1)构造方法实例化bean. (2)构造方法设置对象属性. (3)是否实现aware接口,三种接口(BeanNameAware,BeanFactoryAwar ...

  6. [Asp.Net Core轻量级Aop解决方案]AspectCore Project 介绍

    AspectCore Project 介绍 什么是AspectCore Project ? AspectCore Project 是适用于Asp.Net Core 平台的轻量级 Aop(Aspect- ...

  7. Castle.Windsor IOC/AOP的使用

    Castle最早在2003年诞生于Apache Avalon项目,目的是为了创建一个IOC(控制反转)框架.发展到现在已经有4个组件了,分别是ActiveRecord(ORM组件).Windsor(I ...

  8. asp.net core的AOP记录

    序曲:学习编程最好的方式就是敲代码,没有比这个更好的方法,哪怕你看了上百G的视频,都不如你自己敲几行代码更为有效.还有要记得敲完代码然后写一篇随笔来记录一下你所学所想. 什么叫AOP? AOP面向切面 ...

  9. spring(一)IOC & AOP

    参考文档: spring详解:http://www.cnblogs.com/ysocean/p/7466191.html(可以说非常详细了) aop源码详解:https://www.cnblogs.c ...

随机推荐

  1. element ui的table的头部自定义

    <el-table-column label="级别" min-width="120" prop="clueLevel" align= ...

  2. STP生成树详解图

  3. lol英雄时刻

    2019.5.30 翻出了当年人生中第一次LOL五杀截图...我用佐伊拿五杀了! 第一次五杀超激动的

  4. Oracle审计表AUD$处理方法

    Oracle版本:11.2.0,其他版本要测试DBMS_AUDIT_MGMT能否成功 1. 查询表,然后truncate select count(*) from aud$; truncate tab ...

  5. sourceinsight4 用设置

    通用设置Options - File Type Options: 显示行号:勾选Show line mumbers选中自动高亮:勾选Hightlight references to selected ...

  6. GRU和LSTM比较

    比较: https://www.jianshu.com/p/3774d46b665e https://blog.csdn.net/sinat_33741547/article/details/8282 ...

  7. chrome 打开本地 pdf 会自动开启下载

    正解:修改注册表:[HKEY_CLASSES_ROOT\.pdf],将 Content Type 的值改为: application/pdf 即可

  8. 回声消除(AEC)原理

    一.前言 因为工作的关系,笔者从2004年开始接触回声消除(Echo Cancellation)技术,而后一直在某大型通讯企业从事与回声消除技术相关的工作,对回声消除这个看似神秘.高端和难以理解的技术 ...

  9. open jdk性能与稳定性测试比较(转载)

    因为oracle jdk从jdk8u201之后就不提供免费下载了,所以最近在看openjdk的分支实现,网上搜了下,有下列选择和比较(我们目前主要在跑的是open jdk,不少人推荐的zulu ope ...

  10. cache-control: max-age=1,s-maxage=1

    cache-control: max-age=1,s-maxage=1