c# 部分技术的理解

 

  • AOP 面向切面编程 和 Interceptor 拦截器

  这俩放到一起,AOP其实是一种编程思想,而拦截器是贯彻了这种编程思想的一种实现方式,其他还有Filter 过滤器等,也是沿用了这种思想。

  那么AOP的思想到底是什么呢, 面向切面编程,可以想象一下所有的不同的业务功能模块是在同一层次的东西,如果有一两块功能是大部分的业务功能所需要的,比如常见的日志,权限校验等等,这部分比较通用的功能就可以单独抽出来,放在业务功能的上面一层,就像一片沙拉上加了一层油醋汁,沙拉内容都不同,但是都需要油醋汁。

  如果没有这种思想,就像是每一个沙拉颗粒上都需要倒不同的(特有的)酱汁,那是不是很烦,不如一次性倒入一种你喜欢的(通用的)。

  • DynamicProxy 动态代理 
  • Reflection 反射

  动态代理和反射可以放到一起讲,反射,其实是指程序可以访问、检测和修改它本身状态或行为的一种能力。什么意思呢, C#是有分级的,程序集 -> 模块 -> 类型 -> 成员, 你可以用反射动态的创建一个实例,该实例继承了你需要反射的对象,你可以获取到对应的方法和属性。

  动态代理,这里的代理很好理解,就是代理对象的行为,类似我们需要访问对象时,需要先通过他的代理,再通过代理去访问对象。而动态代理就是通过动态的方式,即无需对象创建专门的代理,而是在IL中创建对应的代理,代码上来说可以批量化处理,更加干净。

  那么动态代理和反射的合作关系就出来了,动态代理在实现过程中需要用到反射的技术。

  动态代理中有一个点需要注意,如果动态代理时,需要给调用的方法添加额外的功能,比如访问权限(是的,也可以和AOP结合起来使用),则需要重写该方法,所以该方法必须是标记为虚方法才能够重写。

  • IOC 控制反转和DI 依赖注入

  控制反转和依赖注入其实是同一个概念,即将对象中依赖的对象的实例化这个过程的控制权,交给容器,或者说,一个对象所依赖的其他对象的实例,通过容器生成再注入到这个对象中。

  说白了就是对象所需要调用其他类,这个实例化其他类的动作,让容器来做,那么可以通过哪些方式注入呢,可以通过配置注入,也可以通过构造函数注入。

posted @ 2020-05-13 16:29  Sylvia小伊  阅读(190)  评论(0编辑  收藏  举报