使用C#仿造SpringIOC注入

为什么要自己仿造

两点原因:
1.自我训练
2.在C#中,没发现可以使用特征(注解)注入进行管理对象的框架,可能是我没细心找吧,所以就自己写了一个

思路

1.首先,我会扫描需要自动扫描的包(可以自己设置)
2.找到有特定特征的包进行IOC注入管理,如:类上有[IocModel]这个注解,我就将它加入到注解管理中
3.创建一系列工厂,如:单例工厂,多例工厂,线程内单例工厂…,当然,他们都集成同一个父类,方便调用(我这里使用工厂模式)
4.创建一个model的初始化类(ModelConfig),这个类中将会存放着model初始化所需要的所有信息
5.创建一个主要的管理类(IOCManager),这个类负责model的存和取
6.添加AOP模块,在初始化model的时候,如果设置了这个命名空间下的类需要AOP,将其进行AOP注入

流程

扫描到需要进行IOC注入的类 ⇒
创建一个ModelConfig对象,并且将类的信息放到这个对象中, ⇒
将ModelConfig对象放CommonContext中,留着备用 ⇒
当需要取这个类的对象的时候,到CommonContext中找到这个类的初始化信息ModelConfig ⇒
然后根据这个类的模式(单例,多例)去各个工厂中初始化这个类的对象(aop注入也是在这里完成)在这里插入图片描述

使用

1.创建IOCManager对象(保证项目内唯一)
2.设置需要扫描的命名空间
3.调用初始化IOCManager的方法,将扫描到的需要进行注入的类进行初始化在这里插入图片描述
Config是配置类,用来配置主要的信息
InterceptorList是拦截器,即AOP注入,暂时我用这个配合SqlSugar进行事务处理

遇到的问题

深度复制问题

现在遇到一个比较麻烦的问题就是,深度复制问题,就是多例模式中,C#没有clone()这种方法,没办法做到深度复制,如果有好的思路的朋友,可以告诉我一下

总结

当然,上面的只是总体的框架,我还在里面加入了文件注入,属性注入,属性对象注入,即spring中的AutoWriter这里的特征,这个更方便我配置一些文件,修改的时候比较方便,或者初始化一些属性的值,因为以前的vs版本里面,C#是不支持:
public string Test{get;set;}=“测试”;
这样的写法的,所以初始化比较麻烦,现在就方便很多,所以这个值注入就显得有点多余了,如果脑洞大点,还能加上各种功能,只要能想到

现在这个框架我也用在了公司项目中,毕竟项目不大,而且用起来没什么问题,还挺方便的,只是有点遗憾的是,公司的项目之前用的是springmvc.net版本的,我也没能结合这个框架,所以在注入Service到Controller中的时候,我只能用static,将Service在Controller中初始化

发布了22 篇原创文章 · 获赞 0 · 访问量 1017

猜你喜欢

转载自blog.csdn.net/weixin_43119903/article/details/94596210