UnityContainer 实现DI

时间:2023-03-08 17:50:01
UnityContainer 实现DI

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

UnityContainer 实现DI

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

 namespace SplitLowSystem.Repository
{
/// <summary>
/// dcy 工厂类
/// </summary>
public static class RepositoryFactory
{
/// <summary>
/// 根据接口创建对应的实体类
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static T Creatobj<T>() where T : class
{ IUnityContainer current = new UnityContainer();
current.RegisterType<ILawCAT, LawCATDal>();
current.RegisterType<ILawProv, LawProvDal>();
current.RegisterType<IT_Law, T_Law>();
current.RegisterType<IT_Law_Prov, T_Law_Prov>();
current.RegisterType<ICodeHY, CodeHYDal>();
current.RegisterType<IHYCodeCAT, HYCodeCATDal>();
current.RegisterType<IDeptCAT, DeptCATDal>(); return current.Resolve<T>(); }
}
}

在bll中使用方式:

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