一、测试仓储层、业务层是否能实现对数据库表的操作
1、创建IsysUserInfoRepository接口来继承IBaseRepository父接口
![](https://i-blog.csdnimg.cn/blog_migrate/cdec0645add3fc3c328197dda5c76203.gif)
1 namespace Wchl.WMBlog.IRepository 2 { 3 public partial interface IsysUserInfoRepository : IBaseRepository<sysUserInfo> 4 { 5 6 } 7 }
2、创建sysUserInfoRepository类继承BaseRepository父类,以及 IsysUserInfoRepository接口
sysUserInfoRepository类:
![](https://i-blog.csdnimg.cn/blog_migrate/cdec0645add3fc3c328197dda5c76203.gif)
1 namespace Wchl.WMBlog.Repository 2 { 3 public partial class sysUserInfoRepository : BaseRepository<sysUserInfo>, IsysUserInfoRepository 4 { 5 6 } 7 }
3、创建服务接口IsysUserInfoServices继承IBaseServices接口
![](https://i-blog.csdnimg.cn/blog_migrate/cdec0645add3fc3c328197dda5c76203.gif)
1 namespace Wchl.WMBlog.IServices 2 { 3 public partial interface IsysUserInfoServices: IBaseServices<sysUserInfo> 4 { 5 } 6 }
4、创建服务类sysUserInfoServices继承BaseServices,以及IsysUserInfoServices接口
![](https://i-blog.csdnimg.cn/blog_migrate/cdec0645add3fc3c328197dda5c76203.gif)
1 namespace Wchl.WMBlog.Services 2 { 3 public partial class sysUserInfoServices: BaseServices<sysUserInfo>, IsysUserInfoServices 4 { 5 6 } 7 } 8
5、服务层的父类BaseServices中baseDal需要new一个仓储父类泛型
public IBaseRepository<TEntity> baseDal = new BaseRepository<TEntity>();
6、在UI层中MVC,HOME控制器index下创建一个添加的实例
![](https://i-blog.csdnimg.cn/blog_migrate/cdec0645add3fc3c328197dda5c76203.gif)
1 IsysUserInfoServices userinfoservice = new sysUserInfoServices(); 2 3 public ActionResult Index() 4 { 5 try 6 { 7 //var usreinfo = userinfoservice.QueryWhere(c => c.uID > 2).FirstOrDefault(); 8 for (int i = 0; i < 10; i++) 9 { 10 userinfoservice.Add(new sysUserInfo() 11 { 12 uLoginName = "admin" + i, 13 uLoginPWD = "123456", 14 uRealName = "超级管理员" + i, 15 uCreateTime = DateTime.Now, 16 uUpdateTime = DateTime.Now, 17 uRemark = "测试添加功能" 18 }); 19 } 20 21 userinfoservice.SaverChanges(); 22 return Content("添加数据成功"); 23 } 24 catch (Exception ex) 25 { 26 27 return Content("错误提示:" + ex.Message); ; 28 } 29 30 }
7、在WebUI的Web.config中添加数据库链接字符串
8、然后启动系统页面提示
表示数据能够正常录入数据库中,查看数据库
数据库中数据已经可以正常插入,另外对表中的字段约束也成功了。
二、使用Autofac依赖注入分离接口与实例之间的关系,达到解耦的目的
1、使用NuGet管理工具下载Autofac,安装在webUI
2、由于需要在系统启动之前来把所有的类创建好相应的对象
需要在Global文件下添加一个配置文件来实现MVC项目的IOC和DI
3、然后在App_Start文件中创建AutofacConfig文件
AutofacConfig文件
![](https://i-blog.csdnimg.cn/blog_migrate/cdec0645add3fc3c328197dda5c76203.gif)
1 namespace Wchl.WMBlog.WebUI 2 { 3 public class AutofacConfig 4 { 5 /// <summary> 6 /// 负责调用autofac框架实现业务逻辑层和数据仓储层程序集中的类型对象的创建 7 /// 负责创建MVC控制器类的对象(调用控制器中的有参构造函数),接管DefaultControllerFactory的工作 8 /// </summary> 9 public static void Register() 10 { 11 //实例化一个autofac的创建容器 12 var builder = new ContainerBuilder(); 13 //告诉Autofac框架,将来要创建的控制器类存放在哪个程序集 (Wchl.CRM.WebUI) 14 Assembly controllerAss = Assembly.Load("Wchl.WMBlog.WebUI"); 15 builder.RegisterControllers(controllerAss); 16 17 //告诉autofac框架注册数据仓储层所在程序集中的所有类的对象实例 18 Assembly respAss = Assembly.Load("Wchl.WMBlog.Repository"); 19 //创建respAss中的所有类的instance以此类的实现接口存储 20 builder.RegisterTypes(respAss.GetTypes()).AsImplementedInterfaces(); 21 22 //告诉autofac框架注册业务逻辑层所在程序集中的所有类的对象实例 23 Assembly serpAss = Assembly.Load("Wchl.WMBlog.Services"); 24 //创建serAss中的所有类的instance以此类的实现接口存储 25 builder.RegisterTypes(serpAss.GetTypes()).AsImplementedInterfaces(); 26 27 // builder.RegisterType<>().As<>(); 28 29 //创建一个Autofac的容器 30 var container = builder.Build(); 31 //将MVC的控制器对象实例 交由autofac来创建 32 DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 33 } 34 } 35 }
4、修改Repository程序集和Services程序集的生成路基到WebUI层的Bin目录下,也可以直接引用的方式。
5、修改HomeController控制器下userinfoservice的生成方式,改为创建构造函数的时候来生成。
6、修改服务层sysUserInfoServices构造函数,使其创建的时候生成相应的对象
把dal复制给dal是为了能拿到sysUserInfoServices中自己特殊的方法。base.baseDal = dal;为拿到父类的公用方法。
BaseServices类中也修改为不需要new一个实例类
7、把homeController下改成查询数据,返回到页面。
显示名字表示Autofac依赖注入成功了
下一篇就是要添加Nlog日志框架以及Cache缓存机制使用使用微软的MemoryCache以及Redis,希望大家多多吐槽,批评指点,谢谢了。