PS:如果图片模糊,鼠标右击复制图片网址,然后在浏览器中打开即可。

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

1、在52MVCBlog.IRepository程序集下创建IsysUserInfoRepository接口来继承IBaseRepository父接口

  IsysUserInfoRepository接口代码:

using _52MVCBlog.IRepository.Base;
using _52MVCBlog.Model.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace _52MVCBlog.IRepository
{
public partial interface IsysUserInfoRepository : IBaseRepository<sysUserInfo>
{
}
}

2、在52MVCBlog.Repository程序集下创建sysUserInfoRepository类继承BaseRepository父类,以及 IsysUserInfoRepository接口

  sysUserInfoRepository代码:

using _52MVCBlog.IRepository;
using _52MVCBlog.Model.Models;
using _52MVCBlog.Repository.Base;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace _52MVCBlog.Repository
{
public partial class sysUserInfoRepository : BaseRepository<sysUserInfo>, IsysUserInfoRepository
{
}
}

3、在52MVCBlog.IService程序集下创建服务接口IsysUserInfoServices继承IBaseServices接口

  IsysUserInfoServices接口代码:

using _52MVCBlog.IService.Base;
using _52MVCBlog.Model.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace _52MVCBlog.IService
{
public partial interface IsysUserInfoServices : IBaseServices<sysUserInfo>
{
}
}

4、在52MVCBlog.Service程序集下创建服务类sysUserInfoServices继承BaseServices,以及IsysUserInfoServices接口

  sysUserInfoServices代码:

using _52MVCBlog.IService;
using _52MVCBlog.Model.Models;
using _52MVCBlog.Service.Base;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace _52MVCBlog.Service
{
public partial class sysUserInfoServices : BaseServices<sysUserInfo>, IsysUserInfoServices
{
}
}

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

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

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

using _52MVCBlog.IService;
using _52MVCBlog.Model.Models;
using _52MVCBlog.Service;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace _52MVCBlog.WebUI.Controllers
{
public class HomeController : Controller
{
IsysUserInfoServices userInfoServices = new sysUserInfoServices();
//
// GET: /Home/
public ActionResult Index()
{
try
{
for (int i = ; i < ; i++)
{
userInfoServices.Add(new sysUserInfo()
{
uLoginName = "admin" + i,
uLoginPWD = "",
uRealName = "超级管理员" + i,
uCreateTime = DateTime.Now,
uUpdateTime = DateTime.Now,
uRemark = "测试添加功能"
});
}
userInfoServices.SaverChanges(); return Content("添加数据成功");
}
catch (Exception ex)
{
return Content("错误提示:" + ex.Message);
}
}
}
}

7、在WebUI的Web.config中添加数据库链接字符串(将52MVCBlog.Model程序集下面的AppConfig文件中的数据拷过来,并修改连接字符串,同时在Lib文件中引用EntityFramework.dll、EntityFramework.SqlServer)

  配置如下:

<?xml version="1.0" encoding="utf-8"?>
<!--
有关如何配置 ASP.NET 应用程序的详细信息,请访问
http://go.microsoft.com/fwlink/?LinkId=301880
-->
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
<connectionStrings>
<add name="52MVCBlogDB" connectionString="server=WYT\SQL2008R2;uid=sa;pwd=123456;database=52MVCBlogDB" providerName="System.Data.SqlClient" />
</connectionStrings>
<appSettings>
<add key="webpages:Version" value="3.0.0.0"/>
<add key="webpages:Enabled" value="false"/>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5"/>
<httpRuntime targetFramework="4.5"/>
</system.web>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

8、然后启动系统页面提示(启动后会自动创建数据库)

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

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

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

详细使用参照:AutoFac (控制反转IOC 与依赖注入DI)

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

2、然后在App_Start文件中创建AutofacConfig.cs文件

  AutofacConfig代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Autofac;
using Autofac.Integration.Mvc;
using System.Reflection;
using System.Web.Mvc; namespace _52MVCBlog.WebUI.App_Start
{
public class AutofacConfig
{
/// <summary>
/// 负责调用autofac框架实现业务逻辑层和数据仓储层程序集中的类型对象的创建
/// 负责创建MVC控制器类的对象(调用控制器中的有参构造函数),接管DefaultControllerFactory的工作
/// 将MVC默认的控制器工厂替换成AutoFac的工厂
/// </summary>
public static void Register()
{
//第一步: 构造一个AutoFac的builder容器
//1.1实例化一个autofac的创建容器
ContainerBuilder builder = new ContainerBuilder(); //第二步:告诉AutoFac控制器工厂,控制器类的创建去哪些程序集中查找(默认控制器工厂是去扫描bin目录下的所有程序集)
//2.1 从当前运行的bin目录下加载52MVCBlog.WebUI程序集
Assembly controllerAss = Assembly.Load("52MVCBlog.WebUI");
//2.2 告诉AutoFac控制器工厂,控制器的创建从controllerAss中查找
//将MVC默认的控制器工厂替换成AutoFac的工厂
//using Autofac.Integration.Mvc;
builder.RegisterControllers(controllerAss); //第三步:告诉AutoFac容器,创建项目中的指定类的对象实例,以接口的形式存储(其实就是创建数据仓储层与业务逻辑层这两个程序集中所有类的对象实例,然后以其接口的形式保存到AutoFac容器内存中,当然如果有需要也可以创建其他程序集的所有类的对象实例,这个只需要我们指定就可以了)
//3.1 加载数据仓储层52MVCBlog.Repository这个程序集。
Assembly respAss = Assembly.Load("52MVCBlog.Repository");
//3.2 反射扫描这个52MVCBlog.Repository.dll程序集中所有的类,到这个程序集中所有类的集合。
Type[] rtypes= respAss.GetTypes();
//3.3 告诉AutoFac容器,创建rtypes这个集合中所有类的对象实例,以其接口的形式保存
builder.RegisterTypes(rtypes).AsImplementedInterfaces(); //3.4 加载业务逻辑层52MVCBlog.Service这个程序集。
Assembly serpAss = Assembly.Load("52MVCBlog.Service");
//3.5 创建serAss中的所有类的instance以此类的实现接口存储
builder.RegisterTypes(serpAss.GetTypes()).AsImplementedInterfaces(); //第四步:创建一个真正的AutoFac的工作容器
var container = builder.Build(); //第五步:将当前容器中的控制器工厂替换掉MVC默认的控制器工厂。//using System.Web.Mvc;
DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); }
}
}

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

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

4、修改Repository程序集和Services程序集的生成路基到WebUI层的Bin目录下,也可以直接引用的方式。(这里不建议修改,还是引用的方便点,不然后期维护不好维护)

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

6、修改服务层sysUserInfoServices构造函数,使其创建的时候生成相应的对象因为sysUserInfoServices继承BaseServices,而BaseServices也可以使用构造函数生成

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

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

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

8、BUG解决

解决方案:52MVCBlog.WebUI添加52MVCBlog.Repository的引用

9、运行效果

~不知不觉到凌晨1点了,明天继续加油~

【干货】利用MVC5+EF6搭建博客系统(二)测试添加数据、集成Autofac依赖注入的更多相关文章

  1. 【干货】利用MVC5+EF6搭建博客系统(四)(上)前后台页面布局页面实现,介绍使用的UI框架以及JS组件

    一.博客系统进度回顾以及页面设计 1.1页面设计说明 紧接前面基础基本完成了框架搭建,现在开始设计页面,前台页面设计我是模仿我博客园的风格来设计的,后台是常规的左右布局风格. 1.2前台页面风格 主页 ...

  2. 【干货】利用MVC5+EF6搭建博客系统(四)(下)前后台布局实现、发布博客以及展示

    二.博客系统后台布局实现 2.1.这里所用的是MVC的布局页来实现的,后台主要分为三部分:导航.菜单.主要内容 代码实现: 这里把后台单独放在一个区域里面,所以我这里建立一个admin的区域 在布局页 ...

  3. 【干货】利用MVC5+EF6搭建博客系统(三)添加Nlog日志、缓存机制(MemoryCache、RedisCache)、创建控制器父类BaseController

    PS:如果图片模糊,鼠标右击复制图片网址,然后在浏览器中打开即可. 一.回顾系统进度以及本章概要 目前博客系统已经数据库创建.以及依赖注入Autofac集成,接下来就是日志和缓存集成,这里日志用的是N ...

  4. 【干货】利用MVC5+EF6搭建博客系统(一)EF Code frist、实现泛型数据仓储以及业务逻辑

    习MVC有一段时间了,决定自己写一套Demo了,写完源码再共享. PS:如果图片模糊,鼠标右击复制图片网址,然后在浏览器中打开即可. 一.框架搭建 二.创建数据库 1.创建一个空的EF code fr ...

  5. 利用MVC5+EF6搭建博客系统

    https://www.cnblogs.com/wyt007/p/7880137.html

  6. Django快速搭建博客系统

    Django快速搭建博客系统 一.开发环境 Windows 7(64bit) python 3.6   https://www.python.org/ Django 2.0  https://www. ...

  7. day14搭建博客系统项目

    day14搭建博客系统项目 1.下载代码包 [root@web02 opt]# git clone https://gitee.com/lylinux/DjangoBlog.git 2.使用pid安装 ...

  8. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(二)-Hexo参数设置

    前言 前文手把手教从零开始在GitHub上使用Hexo搭建博客教程(一)-附GitHub注册及配置介绍了github注册.git相关设置以及hexo基本操作. 本文主要介绍一下hexo的常用参数设置. ...

  9. go语言打造个人博客系统(二)

    go语言打造个人博客系统(二)   在上篇文章go语言打造个人博客系统(一)中,我们了解了go语言的优点和go语言的数据库操作,本次我们会完成博客系统的后端开发. 博客系统后端接口开发 路由测试 ht ...

随机推荐

  1. scrum与第一次teamwork

    一.关于Scrum Scrum是什么?是迭代式增量软件开发过程,通常用于敏捷软件开发,Scrum是一种偏重于过程的敏捷开发的具体方式.Scrum的英文意思是橄榄球运动的一个专业术语,表示“争球”的动作 ...

  2. Python Day 7

    阅读目录 内容回顾: 数据类型相互转换: 字符编码: ##内容回顾 #1.深浅拷贝 ls = [1, 'a', [10]] 值拷贝:直接赋值 ls1 = ls, ls中的任何值发生改变,ls1中的值都 ...

  3. Python基础------列表,元组的调用方法

    Python基础------列表,元组的调用方法@@@ 一. 列表 Python中的列表和歌曲列表类似,也是由一系列的按特定顺序排列的元素组成的,在内容上,可以将整数,实数,字符串,列表,元组等任何类 ...

  4. C语言内存四区的学习总结(一)---- 静态区

    最近重新学习C语言相关知识,重新提到内存四区的概念,那么在之前的学习的基础上,在这儿做一个简单的总结与分享. 一.内存四区建立的流程 可以简单直观的查看下面的这个图片,直接的说明我们的程序在内存中是如 ...

  5. Unity打包提示UnityEditor.BuildPlayerWindow+BuildMethodException: Build failed with errors.错误

    不要将打包的输出路径设置为Assets文件夹下面即可,MD真坑 老外给出的解释: As you have noticed after you click build settings you are ...

  6. Xaml引用图片路径的方式

    最近写代码的时候遇到过好几次引用某个路径下图片资源的情况,思索了一下,便将自己所知的在xaml里引用图片资源的方法写成了个小Demo,并完成了这篇博文.希望罗列出的这些方式能够对大家有所帮助. Xam ...

  7. [已解决]Cannot find one or more components.Please reinstall the application

    Microsoft SQL Server Management Studio 17,一段时间未用出现Cannot find one or more components.Please reinstal ...

  8. some knowledge of language

    1:编译型语言2:解释型语言编译型:编译形成结果,再整体运行解释型:运行产生结果,边解释运行java 特殊(.class)再解释3:脚本语言是解释语言它的优点是方便阅读,不需要写非常多的类型相关的代码 ...

  9. 下载安装配置Maven

    下载安装Apache Maven 1.Maven官网下载jia包:http://maven.apache.org/download.cgi 2.将文件解压到D:\Program Files\apach ...

  10. eclipse里报:An internal error occurred during: "Building workspace". Java heap space(内存溢出)

    当在eclipse中的web工程中增加了extjs4,出现An internal error occurred during: "Building workspace".Java ...