DI(依赖注入) 的方式有很多种: 接口注入,属性注入,构造注入等。DI主要是为了实现代码的松耦合,方便代码的维护和扩展。(其实都是扯淡)。

     来说说我为啥要使用DI吧。公司有个项目,需要我一个人完成(包括前端,后台),时间要求的特别紧凑。而且项目后期维护变动会很大。根据实际情况我对项目的设计如下:

  1.   项目使用mvc + ado.net (也就是数据库访问使用 ado .net 为啥不使用 EF等框架呢 是因为数据库访问速度的原因,虽然说EF的本质还是ado.net 但是控制起来总是感觉没有ado.net 好)。
  2.   项目使用工厂模式。(实在是懒得记接口和实体类的对应,对于大一点的项目来说 你也记不住)。
  3.   项目的层级为 Dal 数据库访问层  IDal 数据库访问接口层  Model 实体类型及其mvc中的视图所需model(对于我自己来说,我觉得视图所需的model放在这里是最恰当的)  BLL 操作层。

     好了,到这里后就剩下一个了 处理工厂的实现。需要引用下面的dll

         

      代码如下:(使用的是接口注入)

       

 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 }
View Code

    在bll中使用方式:

      

            var bll = Repository.RepositoryFactory.Creatobj<IDAL.IT_Law_Prov>();

  

       

 

     

 posted on 2016-08-05 12:09  一朵茉莉花  阅读(354)  评论(0编辑  收藏  举报