DI(依赖注入) 的方式有很多种: 接口注入,属性注入,构造注入等。DI主要是为了实现代码的松耦合,方便代码的维护和扩展。(其实都是扯淡)。
来说说我为啥要使用DI吧。公司有个项目,需要我一个人完成(包括前端,后台),时间要求的特别紧凑。而且项目后期维护变动会很大。根据实际情况我对项目的设计如下:
- 项目使用mvc + ado.net (也就是数据库访问使用 ado .net 为啥不使用 EF等框架呢 是因为数据库访问速度的原因,虽然说EF的本质还是ado.net 但是控制起来总是感觉没有ado.net 好)。
- 项目使用工厂模式。(实在是懒得记接口和实体类的对应,对于大一点的项目来说 你也记不住)。
- 项目的层级为 Dal 数据库访问层 IDal 数据库访问接口层 Model 实体类型及其mvc中的视图所需model(对于我自己来说,我觉得视图所需的model放在这里是最恰当的) BLL 操作层。
好了,到这里后就剩下一个了 处理工厂的实现。需要引用下面的dll
代码如下:(使用的是接口注入)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 namespace SplitLowSystem.Repository 2 { 3 /// <summary> 4 /// dcy 工厂类 5 /// </summary> 6 public static class RepositoryFactory 7 { 8 /// <summary> 9 /// 根据接口创建对应的实体类 10 /// </summary> 11 /// <typeparam name="T"></typeparam> 12 /// <returns></returns> 13 public static T Creatobj<T>() where T : class 14 { 15 16 IUnityContainer current = new UnityContainer(); 17 current.RegisterType<ILawCAT, LawCATDal>(); 18 current.RegisterType<ILawProv, LawProvDal>(); 19 current.RegisterType<IT_Law, T_Law>(); 20 current.RegisterType<IT_Law_Prov, T_Law_Prov>(); 21 current.RegisterType<ICodeHY, CodeHYDal>(); 22 current.RegisterType<IHYCodeCAT, HYCodeCATDal>(); 23 current.RegisterType<IDeptCAT, DeptCATDal>(); 24 25 return current.Resolve<T>(); 26 27 } 28 } 29 }
在bll中使用方式:
var bll = Repository.RepositoryFactory.Creatobj<IDAL.IT_Law_Prov>();