从零开始,搭建博客系统MVC5+EF6搭建框架(2),测试添加数据、集成Autofac依赖注入

一、测试仓储层、业务层是否能实现对数据库表的操作

1、创建IsysUserInfoRepository接口来继承IBaseRepository父接口

  1 namespace Wchl.WMBlog.IRepository
  2 {
  3     public partial interface IsysUserInfoRepository : IBaseRepository<sysUserInfo>
  4     {
  5 
  6     }
  7 }
View Code

2、创建sysUserInfoRepository类继承BaseRepository父类,以及 IsysUserInfoRepository接口

sysUserInfoRepository类:

  1 namespace Wchl.WMBlog.Repository
  2 {
  3     public partial class sysUserInfoRepository : BaseRepository<sysUserInfo>, IsysUserInfoRepository
  4     {
  5 
  6     }
  7 }
View Code

3、创建服务接口IsysUserInfoServices继承IBaseServices接口

  1 namespace Wchl.WMBlog.IServices
  2 {
  3     public partial interface IsysUserInfoServices: IBaseServices<sysUserInfo>
  4     {
  5     }
  6 }
View Code

4、创建服务类sysUserInfoServices继承BaseServices,以及IsysUserInfoServices接口

 

  1 namespace Wchl.WMBlog.Services
  2 {
  3      public partial class sysUserInfoServices: BaseServices<sysUserInfo>, IsysUserInfoServices
  4     {
  5 
  6     }
  7 }
  8 
View Code

5、服务层的父类BaseServices中baseDal需要new一个仓储父类泛型

public IBaseRepository<TEntity> baseDal = new BaseRepository<TEntity>();

6、在UI层中MVC,HOME控制器index下创建一个添加的实例

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

7、在WebUI的Web.config中添加数据库链接字符串

image

8、然后启动系统页面提示

image

表示数据能够正常录入数据库中,查看数据库

image

数据库中数据已经可以正常插入,另外对表中的字段约束也成功了。

二、使用Autofac依赖注入分离接口与实例之间的关系,达到解耦的目的

1、使用NuGet管理工具下载Autofac,安装在webUI

image

2、由于需要在系统启动之前来把所有的类创建好相应的对象

需要在Global文件下添加一个配置文件来实现MVC项目的IOC和DI

image

3、然后在App_Start文件中创建AutofacConfig文件

AutofacConfig文件

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

4、修改Repository程序集和Services程序集的生成路基到WebUI层的Bin目录下,也可以直接引用的方式。

5、修改HomeController控制器下userinfoservice的生成方式,改为创建构造函数的时候来生成。

image

6、修改服务层sysUserInfoServices构造函数,使其创建的时候生成相应的对象

image

把dal复制给dal是为了能拿到sysUserInfoServices中自己特殊的方法。base.baseDal = dal;为拿到父类的公用方法。

BaseServices类中也修改为不需要new一个实例类

image

7、把homeController下改成查询数据,返回到页面。

image

image

显示名字表示Autofac依赖注入成功了

下一篇就是要添加Nlog日志框架以及Cache缓存机制使用使用微软的MemoryCache以及Redis,希望大家多多吐槽,批评指点,谢谢了。

 

posted @ 2016-09-23 23:13  坚持的阳光  阅读(5215)  评论(5编辑  收藏  举报