zoukankan      html  css  js  c++  java
  • 从零开始,搭建博客系统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,希望大家多多吐槽,批评指点,谢谢了。

  • 相关阅读:
    java做微信支付notify_url异步通知服务端的写法
    QT如何编译出带调试信息的qtwebkit库
    Vmware 占用宿主机硬盘空间只增不减
    vmware linux无法正常上网
    Linux中find常见用法示例
    计算机网络OSI参考模型与tcp/ip四层模型
    Core开发-后台任务利器Hangfire使用
    Azure构建PredictionIO和Spark的推荐引擎服务
    NET MVC+EF6+Bootstrap
    服务器
  • 原文地址:https://www.cnblogs.com/M-LittleBird/p/5902039.html
Copyright © 2011-2022 走看看