【干货】利用MVC5+EF6搭建博客系统(二)测试添加数据、集成Autofac依赖注入
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依赖注入的更多相关文章
- 【干货】利用MVC5+EF6搭建博客系统(四)(上)前后台页面布局页面实现,介绍使用的UI框架以及JS组件
一.博客系统进度回顾以及页面设计 1.1页面设计说明 紧接前面基础基本完成了框架搭建,现在开始设计页面,前台页面设计我是模仿我博客园的风格来设计的,后台是常规的左右布局风格. 1.2前台页面风格 主页 ...
- 【干货】利用MVC5+EF6搭建博客系统(四)(下)前后台布局实现、发布博客以及展示
二.博客系统后台布局实现 2.1.这里所用的是MVC的布局页来实现的,后台主要分为三部分:导航.菜单.主要内容 代码实现: 这里把后台单独放在一个区域里面,所以我这里建立一个admin的区域 在布局页 ...
- 【干货】利用MVC5+EF6搭建博客系统(三)添加Nlog日志、缓存机制(MemoryCache、RedisCache)、创建控制器父类BaseController
PS:如果图片模糊,鼠标右击复制图片网址,然后在浏览器中打开即可. 一.回顾系统进度以及本章概要 目前博客系统已经数据库创建.以及依赖注入Autofac集成,接下来就是日志和缓存集成,这里日志用的是N ...
- 【干货】利用MVC5+EF6搭建博客系统(一)EF Code frist、实现泛型数据仓储以及业务逻辑
习MVC有一段时间了,决定自己写一套Demo了,写完源码再共享. PS:如果图片模糊,鼠标右击复制图片网址,然后在浏览器中打开即可. 一.框架搭建 二.创建数据库 1.创建一个空的EF code fr ...
- 利用MVC5+EF6搭建博客系统
https://www.cnblogs.com/wyt007/p/7880137.html
- Django快速搭建博客系统
Django快速搭建博客系统 一.开发环境 Windows 7(64bit) python 3.6 https://www.python.org/ Django 2.0 https://www. ...
- day14搭建博客系统项目
day14搭建博客系统项目 1.下载代码包 [root@web02 opt]# git clone https://gitee.com/lylinux/DjangoBlog.git 2.使用pid安装 ...
- 手把手教从零开始在GitHub上使用Hexo搭建博客教程(二)-Hexo参数设置
前言 前文手把手教从零开始在GitHub上使用Hexo搭建博客教程(一)-附GitHub注册及配置介绍了github注册.git相关设置以及hexo基本操作. 本文主要介绍一下hexo的常用参数设置. ...
- go语言打造个人博客系统(二)
go语言打造个人博客系统(二) 在上篇文章go语言打造个人博客系统(一)中,我们了解了go语言的优点和go语言的数据库操作,本次我们会完成博客系统的后端开发. 博客系统后端接口开发 路由测试 ht ...
随机推荐
- 运用SharedPreferences“偷取”输入的信息
运用SharedPreferences"偷取"输入的信息 本次的任务是 利用SharedPreferences来完成信息的保存和读取 就是你输入什么 手机就可以把输入的内容&quo ...
- MySQL数据库学习书单/书籍
MySQL数据库学习书单 1.MySQL必知必会(MySQL Crash Course) 豆瓣详情 主要适合前期掌握MySQL,豆瓣评分8.4. 2.高性能MySQL 豆瓣详情 主要适合进阶阅读使 ...
- 利用Python生成GIF动图
一.PIL库 1.PIL库的概括: PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库 ...
- linux五种I/O模型
1.基本概念 1.1同步和异步 同步和异步关注的是消息通信机制 1.1.1同步 所谓同步,就是在发出一个调用时,在没有得到结果之前,调用就不返回,一直在等,但是一旦调用返回,就能得到返回值. 1.1. ...
- s6-7 TCP 传输策略
TCP 传输策略 防止黏包现象的出现 当窗口数为 0 时,发送者不能正常发送数据段,除非: -Urgent数据.比如,用户想杀掉远端机器上的进程的时候,可以发送数据 -发送者可以发送一个字节的数据段, ...
- eclipse中搭建ssm框架
工具:jdk1.7+eclipse+tomcat+mysql. 这里用的版本是spring3,框架中用到的实体类和xml映射文件都可以用工具生成的.接下来会将源码贴出,方便初学者快速搭建. 一.新建一 ...
- 用pyspider爬取并解析json字符串
获取堆糖网站所有用户的id 昵称及主页地址 #!/usr/bin/env python # -*- encoding: utf-8 -*- # Created on 2016-06-21 13:57: ...
- Codeforces831A Unimodal Array
A. Unimodal Array time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- Jeecg框架简介
官方地址:http://www.jeecg.org/
- BCrypt实现密码的加密
这里设计到一个新的知识点,下来准备找找资料学习一下:Spring Security 我们都知道,密码这种东西存到数据库是不能以明文直接存入的,而是要经过加密,而且加密还颇多讲究 比如以前的 MD5加密 ...