asp.net mvc 简单项目框架的搭建(二)—— Spring.Net在Mvc中的简单应用
摘要:上篇写了如何搭建一个简单项目框架的上部分,讲了关于Dal和Bll之间解耦的相关知识,这篇来把后i面的部分说一说。
上篇讲到DbSession,现在接着往下讲。
首先,还是把一些类似的操作完善一下,与Dal层相同,我们同样可以把Bll层中某些使用广泛的类似的操作封装到基类中,另外,同样要给Bll层添加接口层。
下面直接给出相应的代码:
Bll层基类:
BaseService.cs
public abstract class BaseService<T> where T : class,new()
{
public IBaseDal<T> CurrentDal { get; set; } public IDbSession DbSession
{
get
{
return DbSessionFactory.GetCurrentDbSession();
}
} public BaseService()
{
SetCurrentDal();
} public abstract void SetCurrentDal();//抽象方法:要求子类必须实现。 public IQueryable<T> GetEntityByLambda(Expression<Func<T,bool>> wherelambda)
{
return CurrentDal.GetEntityByLambda(wherelambda);
} public T AddEntity(T entity)
{
CurrentDal.AddEntity(entity);
DbSession.SaveChanges();
return entity;
} //删除 public bool DeleteEntity(T entity)
{
CurrentDal.DeleteEntity(entity);
return DbSession.SaveChanges() > ; }
// 改
public bool UpdateEntity(T entity)
{
CurrentDal.UpdateEntity(entity);
return DbSession.SaveChanges() > ; }
}
IBaseService.cs
public interface IBaseService<T> where T : class,new()
{
IQueryable<T> GetEntityByLambda(Expression<Func<T, bool>> wherelambda);
T AddEntity(T entity);
bool DeleteEntity(T entity);
bool UpdateEntity(T entity);
}
IUserService.cs
public interface IUserService:IBaseService<Users>
{ }
UserService.cs
public class UserService:BaseService<Users>,IUserService
{ //IUserDal userDal = AbstractFactory.GetUserDal();
//IDbSession dbSession = DbSessionFactory.GetCurrentDbSession();
//public Users AddUser(Users user)
//{
// dbSession.UserDal.AddEntity(user);
// dbSession.SaveChanges();
// return user;
//} //public IQueryable<Users> GetUserByLambda(Expression<Func<Users,bool>> wherelambada)
//{
// return dbSession.UserDal.GetEntityByLambda(wherelambada);
//} //public bool DeleteUser(Users user)
//{
// dbSession.UserDal.DeleteEntity(user);
// return dbSession.SaveChanges() > 0;
//} //public bool UpdateUser(Users user)
//{
// dbSession.UserDal.UpdateEntity(user);
// return dbSession.SaveChanges() > 0;
//} //给父类的属性赋值
public override void SetCurrentDal()
{
CurrentDal = this.DbSession.UserDal;
}
}
以上就是对Bll层的一些封装和接口层的构建,现在在现有的代码基础上,我们来看一下,控制器对Bll层的常规调用:
下面给一段简短代码:
HomeController => AddUser方法
public ActionResult AddUser(FormCollection form)
{
Users user = new Users();
//重点看这句,对Bll层的调用
IUserService userService = new UserService();
user.UserName = form["name"];
user.PassWord = form["pwd"];
user.PhoneNumber = form["phone"];
user.EMail = form["email"];
userService.AddEntity(user);
if (user == null)
{
return View("Contact");
}
else
{
return View("About");
}
}
这是一段向数据库中添加user信息的代码,前端代码省略了。
从这段代码里我们可以看到,这里Bll层和UI等的耦合度仍然非常的高,
IUserService userService = new UserService();
这一句跟前面讲的Bll层调Dal层一样,耦合度很高,那么如何降低这个耦合度呢,再次使用工厂的方法吗,不不不,那好像太麻烦了。
这里就要用到一个新的知识点了———— spring.net (据说这个很牛逼,但我也不咋清楚,只能边学边写了)。
接下来说一下spring.net的使用方法和步骤:
1.在web.config中添加Spring.Net块配置和Spring.Net容器配置节点
块配置节点:
<!--Spring.Net块配置-->
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc4"/>
</sectionGroup>

容器配置节点
<!--Spring.Net 的容器的配置节点-->
<spring>
<context>
<resource uri="file://~/Config/controllers.xml"/>
</context>
</spring>

2.添加相关引用
首先,在程序目录下的package文件夹新建 Spring.Net文件夹,然后导入如下文件:


导入如下文件:




在Ui项目下添加引用:

3.更改global.aspx.cs文件

将 MvcApplication 由继承 System.Web.HttpApplication 改为 Sring.Web.Mvc.SpringMvcApplication .
4.在UI项目下新建Config文件夹,在文件夹中新建如下两个配置文件:controller.xml 和 services.xml

controller.xml文件代码如下:
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net"> <!--<object></object>引用了几个Service就写几个Service,此处只引用一个Service,所以只写一个-->
<!--type ="类的全名(命名空间名+类名),程序集名称"-->
<object type="IotPf.UI.Controllers.HomeController,IotPf.UI" singleton="false" >
<property name="UserService" ref="UserService" /> </object>
</objects>
services.xml文件代码如下:
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net"> <object name="UserService" type=" IotPf.Bll.UserService,IotPf.Bll" singleton="false" >
</object> </objects>
注意:在web.config中记得将services.xml的引用添加进来,并且要注意顺序,先services.xml,后controller.xml

5. 然后我们回到HomeController中来:在其中添加属性userService

然后执行程序,发现会报如下错误:

此时,我们添加如下引用:
microsoft.aspnet.webapi

然后,再次执行程序:
运行结果无误:

这就是Spring.Net的使用步骤了。
通过使用Spring.Net,也达到了使UI层和Bll层解耦的目的,而且操作较之工厂的操作简单的多。
好了,一个简单框架的第二部分,UI层和Bll层的解耦也完成了,关于框架搭建的这篇博客就写到这里啦。
我的email:3074596466@qq.com
如有谬误,欢迎指正!
asp.net mvc 简单项目框架的搭建(二)—— Spring.Net在Mvc中的简单应用的更多相关文章
- asp.net mvc 简单项目框架的搭建过程(一)对Bll层和Dal层进行充分解耦
学习asp.net 已经有近三个月的时间了,在asp.net mvc上花的时间最多,但个人真是有些菜,不得不说,asp.net mvc的水真的还是蛮深的.目前在公司实习,也见过公司几个项目的代码了.对 ...
- ASP.NET MVC企业级项目框架
ASP.NET MVC企业级项目框架 MVC项目搭建笔记---- 项目框架采用ASP.NET MVC+Entity Framwork+Spring.Net等技术搭建,搭建过程内容比较多,结合了抽象工厂 ...
- 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(1 构建目录环境和依赖)
引言:在用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建一 的基础上 继续进行项目搭建 该部分的主要目的是测通MyBatis 及Spring-dao ...
- 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(2 配置spring-dao和测试)
用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(1 搭建目录环境和依赖) 四:在\resources\spring 下面 ...
- ASP.NET MVC项目框架快速搭建实战
MVC项目搭建笔记---- 项目框架采用ASP.NET MVC+Entity Framwork+Spring.Net等技术搭建,采用”Domain Model as View Model“的MVC开发 ...
- iOS通用的MVC模式项目框架MobileProject
最近项目比较不赶的情况下,决定把一些通用.常用的内容集成在一个项目框架中,意在新项目中可以快速搭建:其实经过几个项目后,总是有一些重复的创建工作,可以使用本项目的内容直接进行开发:采用的是MVC的分层 ...
- 我是如何进行Spring MVC文档翻译项目的环境搭建、项目管理及自动化构建工作的
感兴趣的同学可以关注这个翻译项目 . 我的博客原文 和 我的Github 前段时间翻译的Spring MVC官方文档完成了第一稿,相关的文章和仓库可以点击以下链接.这篇文章,主要是总结一下这个翻译项目 ...
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:SSM(Spring+Spring MVC+MyBatis)框架整合搭建详细步骤
因为 Spring MVC 是 Spring 框架中的一个子模块,所以 Spring 与 SpringMVC 之间不存在整合的问题.实际上,SSM 框架的整合只涉及 Spring 与 MyBatis ...
- eclipse中SSH三大框架环境搭建<二>
通过上一篇博客我们可以轻松搭建strtus2的环境,接下来由我来继续介绍spring的环境搭建以及spring注入的简单使用 相关链接:eclipse中SSH三大k框架环境搭建<一> ec ...
随机推荐
- Python+Appium 获取 toast 文本值方法的封装
获取toast内容方法封装如下: def get_Toast(self,message): #查找toast值 ''' method explain:查找toast的值,与find_Toast实现方法 ...
- 文本离散表示(一):词袋模型(bag of words)
一.文本表示 文本表示的意思是把字词处理成向量或矩阵,以便计算机能进行处理.文本表示是自然语言处理的开始环节. 文本表示按照细粒度划分,一般可分为字级别.词语级别和句子级别的文本表示.字级别(char ...
- 『审慎』.Net4.6 Task 异步函数 比 同步函数 慢5倍 踩坑经历
异步Task简单介绍 本标题有点 哗众取宠,各位都别介意(不排除个人技术能力问题) —— 接下来:我将会用一个小Demo 把 本文思想阐述清楚. .Net 4.0 就有了 Task 函数 —— 异步编 ...
- Aria2序之导言
aria2是什么,如果此时此刻你看到标题读到第一行正在思索着一个问题,很抱歉 ,这篇以及后续我的blog不适合你,请移步. 我在aria2的官方站点抄袭了如下语句用来充实本文: aria2 is a ...
- 第6章 令牌撤销端点(Token Revocation Endpoint) - IdentityModel 中文文档(v1.0.0)
OAuth 2.0令牌撤销的客户端库是作为扩展方法提供的HttpClient. 以下代码撤消撤销端点处的访问令牌令牌: var client = new HttpClient(); var resul ...
- 搜狗输入法与VS快捷键有冲突_处理办法
前言:搜狗输入法是大家常用的文字输入工具,但是在开启输入法的时候,VS的一些快捷键无法正常使用,如智能提示快捷键:Ctrl+.,这就非常尴尬了,除非把输入法切换成英文或者卸载搜狗改别的输入法,一个是切 ...
- 浅谈java线程池实现
再进入主题之前,我们先了解几个概念,对读源码有所帮助,对于线程池的运行状态,有4个级别,分别是RUNNING,SHUTING,STOP,TIDING,TERMINATED 解释如下: The runS ...
- JQuery --- 第二期 (jQuery属性操作)
个人学习笔记 1.JQuery的内容选择器 <!DOCTYPE html> <html lang="en"> <head> <meta c ...
- css控制UL LI 的样式详解(推荐)
代码如下: <div id="menu"> <ul> <li><a href="#">首页</a>& ...
- SuperMap iObject入门开发系列之六管线区域查询
本文是一位好友“托马斯”授权给我来发表的,介绍都是他的研究成果,在此,非常感谢. 管线区域查询功能针对单一管线图层进行区域多边形框选查询,然后将查询结果输出为列表,并添加定位和闪烁功能,效果如下图所示 ...