.NET Core IOC AOP
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的更多相关文章
- Spring中三个重要概念 IOC AOP Bean
Spring中三个重要概念 IOC AOP Bean 首先讲解一下Spring框架,以及为什么要使用Spring 框架? spring 是一个很好的容器框架, 是轻量级的IoC和AOP的容器框架,主要 ...
- 仿写一个简陋的 IOC/AOP 框架 mini-spring
讲道理,感觉自己有点菜.Spring 源码看不懂,不想强行解释,等多积累些项目经验之后再看吧,但是 Spring 中的控制反转(IOC)和面向切面编程(AOP)思想很重要,为了更好的使用 Spring ...
- spring ioc aop 原理
spring ioc aop 原理 spring ioc aop 的原理 spring的IoC容器是spring的核心,spring AOP是spring框架的重要组成部分. 在传统的程序设计中,当调 ...
- IOC AOP 设计模式
IOC AOP 不是什么技术而是一种设计模式 学习 IOC AOP 其实是在学习一种思想. 1.IOC IOC其实是 将对象的创建和获取提取到外部.由外部IOC容器提供需要的组件. 看下面代码: p ...
- Spring Bean的生命周期、Spring MVC的工作流程、IOC,AOP
1.Spring Bean的生命周期? (1)构造方法实例化bean. (2)构造方法设置对象属性. (3)是否实现aware接口,三种接口(BeanNameAware,BeanFactoryAwar ...
- [Asp.Net Core轻量级Aop解决方案]AspectCore Project 介绍
AspectCore Project 介绍 什么是AspectCore Project ? AspectCore Project 是适用于Asp.Net Core 平台的轻量级 Aop(Aspect- ...
- Castle.Windsor IOC/AOP的使用
Castle最早在2003年诞生于Apache Avalon项目,目的是为了创建一个IOC(控制反转)框架.发展到现在已经有4个组件了,分别是ActiveRecord(ORM组件).Windsor(I ...
- asp.net core的AOP记录
序曲:学习编程最好的方式就是敲代码,没有比这个更好的方法,哪怕你看了上百G的视频,都不如你自己敲几行代码更为有效.还有要记得敲完代码然后写一篇随笔来记录一下你所学所想. 什么叫AOP? AOP面向切面 ...
- spring(一)IOC & AOP
参考文档: spring详解:http://www.cnblogs.com/ysocean/p/7466191.html(可以说非常详细了) aop源码详解:https://www.cnblogs.c ...
随机推荐
- MySQL 基础之一
为了满足关系范式:通常一个大的数据集会拆成在一个库(集合内)中多张表表来存储,每一张表就是由行和列组成的二维关系,表与表之间也有关系,查询有时候需要做表链接,而表链接这个过程需要依赖于索引到各种算法来 ...
- [ZJOI2007][BZOJ1060]时态同步
Description 小Q在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数 字1,2,3….进行标号.电路板的各个节点由若干不相交的导线相连接,且对于电路 ...
- Oracle中查询走索引的情况
1.对返回的行无任何限定条件,即没有where子句 2.未对数据表与任何索引主列相对应的行限定条件例如:在City-State-Zip列创建了三列复合索引,那么仅对State列限定条件不能使用这个索引 ...
- vgg16中的函数
1.inspect.getfile(文件名)文件名一般与类名相同,返回文件目录包含文件名 import inspect class os测试: def __init__(self): path = i ...
- PHP如何解决网站大流量与高并发的问题(一)
高并发的相关概念 在某个时间点,有多少个访问量 如果一个系统的日PV在千万以上,有可能是一个高并发的系统 QPS: 每秒钟请求或者查询的数量,在互联网领域,指每秒相应请求数(指HTTP请求) 吞吐量: ...
- GLTF模型查看器---优化器【转】
https://blog.csdn.net/weixin_43081805/article/details/88743277 Clay Viewer(我只想说好用,直接可以导出gltf的二进制glb格 ...
- Cent0S 6.7直接在/etc/resolv.conf文件下修改DNS地址重启不生效问题【转】
CentOS 6.7/Linux下设置IP地址 1:临时修改: 1.1:修改IP地址 # ifconfig eth0 192.168.2.104 1.2:修改网关地址 # route add defa ...
- postgresQL 服务器端守护进程
- RabbitMQ之Direct交换器模式开发
Dirtct交换器,即发布与订阅模式,匹配规则为完全匹配. 一.Provideer 配置文件 spring.application.name=provider spring.rabbitmq.host ...
- 利用Word发布文章到cnblogs博客
利用Word发布文章到cnblogs博客 用博客园cnblogs:http://www.cnblogs.com/博客名称/services/metablogapi.aspx,word老是提醒" ...