25、ASP.NET MVC入门到精通——Spring.net-业务层仓储
本系列目录:ASP.NET MVC4入门到精通系列目录汇总
上一节,我们已经把项目框架的雏形搭建好了,那么现在我来开始业务实现,在业务实现的过程当中,不断的来完善我们现有的框架。
1、假设我们来做一个用户登录的业务
那么我们可以现在IDAL项目中定义的的接口IOu_UserInfoDAL,注意是部分类partial,为了方便管理,把这些扩展的部分接口都统一放到文件夹ExtensionIDAL中进行管理,注意命名空间要和之前的部分接口一致。
using Model;
namespace IDAL
{
public partial interface IOu_UserInfoDAL
{
Ou_UserInfo GetUserInfoByName(string loginName);
}
}
2、DAL项目中,新建文件夹ExtensionDAL,文件夹下面新建部分类Ou_UserInfoDAL
using IDAL;
using Model; namespace DAL
{
public partial class Ou_UserInfoDAL : IOu_UserInfoDAL
{
public Ou_UserInfo GetUserInfoByName(string loginName)
{
return base.GetListBy(x => x.uLoginName == loginName).FirstOrDefault();
}
}
}
3、IBLL项目新建文件夹ExtensionIBLL,文件夹下面新建IOu_UserInfoBLL接口
using Model; namespace IBLL
{
public partial interface IOu_UserInfoBLL
{
Ou_UserInfo Login(string strName, string strPwd);
}
}
BLL项目中新建文件夹ExtensionBLL,文件夹下面新建Ou_UserInfoBLL类
using Model;
using IBLL; namespace BLL
{
public partial class Ou_UserInfoBLL : IOu_UserInfoBLL
{
/// <summary>
/// 登陆
/// </summary>
/// <param name="strName"></param>
/// <param name="strPwd"></param>
/// <returns></returns>
public Ou_UserInfo Login(string strName, string strPwd)
{
//1.调用业务层方法 根据登陆名查询
Ou_UserInfo usr = base.GetListBy(u => u.uLoginName == strName).FirstOrDefault();
//2.判断是否登陆成功 return null;
}
}
}
4、关于spring.net的使用请参考:17、ASP.NET MVC入门到精通——Spring.net入门
我们下载下来spring.net包,然后把Spring.Core.dll 、和 Spring.Web.dll、Common.Logging.dll拷贝过来。在Web项目中添加一个Lib文件夹用来存放第三方的dll。
DI项目中,添加这两个dll的引用,然后新建类SpringHelper
using Spring.Context;
using Spring.Context.Support; namespace DI
{
public static class SpringHelper
{
#region 1.0 Spring容器上下文 -IApplicationContext SpringContext
/// <summary>
/// Spring容器上下文
/// </summary>
private static IApplicationContext SpringContext
{
get
{
return ContextRegistry.GetContext();
}
}
#endregion #region 2.0 获取配置文件 配置的 对象 +T GetObject<T>(string objName) where T : class
/// <summary>
/// 获取配置文件 配置的 对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="objName"></param>
/// <returns></returns>
public static T GetObject<T>(string objName) where T : class
{
return (T)SpringContext.GetObject(objName);
}
#endregion
}
5、修改Web项目中的Web.config文件,添加Spring配置
<!-- Spring 的配置 -->
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.WebContextHandler, Spring.Web"/>
<!-- 支持在 web.config 中定义对象 -->
<section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
</sectionGroup>
</configSections>
<spring>
<context>
<resource uri="~/Config/objects.xml"/>
</context>
</spring>
Web项目中创建一个名为 Config 的文件夹,以保存独立的配置文件
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
<object id="Ou_UserInfo" type="BLL.Ou_UserInfo,BLL" singleton="false"></object>
<object id="BLLSession" type="BLL.BLLSession,BLL" singleton="false"></object>
<object id="DBSessFactory" type="DAL.DBSessionFactory,DAL"></object>
</objects>
修改BaseBLL.cs
#region 数据仓储 属性 + IDBSession DBSession
/// <summary>
/// 数据仓储 属性
/// </summary>
public IDAL.IDBSession DBSession
{
get
{
if (iDbSession == null)
{
////1.读取配置文件
//string strFactoryDLL = Common.ConfigurationHelper.AppSetting("DBSessionFatoryDLL");
//string strFactoryType = Common.ConfigurationHelper.AppSetting("DBSessionFatory");
////2.1通过反射创建 DBSessionFactory 工厂对象
//Assembly dalDLL = Assembly.LoadFrom(strFactoryDLL);
//Type typeDBSessionFatory = dalDLL.GetType(strFactoryType);
//IDAL.IDBSessionFactory sessionFactory = Activator.CreateInstance(typeDBSessionFatory) as IDAL.IDBSessionFactory; //2.根据配置文件内容 使用 DI层里的Spring.Net 创建 DBSessionFactory 工厂对象
IDAL.IDBSessionFactory sessionFactory = DI.SpringHelper.GetObject<IDAL.IDBSessionFactory>("DBSessFactory"); //3.通过 工厂 创建 DBSession对象
iDbSession = sessionFactory.GetDBSession();
}
return iDbSession;
}
}
#endregion
6、我们来看下控制器的调用
public ActionResult Index()
{
//1.通过业务接口查询数据
var Ou_UserInfoBLL = DI.SpringHelper.GetObject<IOu_UserInfoBLL>("Ou_UserInfo");
var userInfo= Ou_UserInfoBLL.Login("", "");
//2.加载视图
return View();
}
我每个地方都通过DI.SpringHelper.GetObject<IOu_UserInfoBLL>("Ou_UserInfo");来调用是不是很不方便,那么我们可以来创建一个业务层仓储来统一管理这些对象的创建。
7、IBLL项目,新建T4模板IBLLSession.tt,拷贝之前IDAL中的模板IDALSession过来,稍微修改一下就可以了
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#><#@ output extension=".cs"#>
<#
CodeGenerationTools code = new CodeGenerationTools(this);
MetadataLoader loader = new MetadataLoader(this);
CodeRegion region = new CodeRegion(this, );
MetadataTools ef = new MetadataTools(this);
string inputFile = @"..\MODEL\OA.edmx";
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
string namespaceName = code.VsNamespaceSuggestion();
EntityFrameworkTemplateFileManager fileManager = EntityFrameworkTemplateFileManager.Create(this);
#>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace IBLL
{
public partial interface IBLLSession
{
<#
// Emit Entity Types
foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{#>
I<#=entity.Name#>BLL I<#=entity.Name#>BLL{get;set;}
<#}#>
}
}
8、BLL项目,新建T4模板BLLSession.tt,拷贝之前DAL中的模板DALSession过来,稍微修改一下就可以了
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#><#@ output extension=".cs"#>
<#
CodeGenerationTools code = new CodeGenerationTools(this);
MetadataLoader loader = new MetadataLoader(this);
CodeRegion region = new CodeRegion(this, );
MetadataTools ef = new MetadataTools(this);
string inputFile = @"..\MODEL\OA.edmx";
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
string namespaceName = code.VsNamespaceSuggestion();
EntityFrameworkTemplateFileManager fileManager = EntityFrameworkTemplateFileManager.Create(this);
#>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IBLL; namespace BLL
{
public partial class BLLSession:IBLLSession
{
<#
int index=;
// Emit Entity Types
foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{
index++;
#>
#region <#=index #> 数据接口 I<#=entity.Name#>BLL
I<#=entity.Name#>BLL i<#=entity.Name#>BLL;
public I<#=entity.Name#>BLL I<#=entity.Name#>BLL{
get
{
if(i<#=entity.Name#>BLL==null)
i<#=entity.Name#>BLL=new <#=entity.Name#>BLL();
return i<#=entity.Name#>BLL;
}
set
{
i<#=entity.Name#>BLL=value;
}
}
#endregion <#}#>
}
}
9、业务层仓储建立好了,现在我们表现层来调用业务层仓储的时候,每次又要去创建一个业务层对象,同样的,我们可以创建一个表现层上下文来统一管理业务层对象的创建。在UI目录下面,添加类库项目Web.Helper,添加对IBLL和DI项目的引用,新建OperateContext.cs
using DI;
using IBLL; namespace Web.Helper
{
public class OperateContext
{
public static IBLLSession _IBLLSession = SpringHelper.GetObject<IBLLSession>("BLLSession");
}
}
10、修改控制器调用
using IBLL;
using Web.Helper;
public ActionResult Index()
{
var userInfo = OperateContext._IBLLSession.IOu_UserInfoBLL.Login("", "");
//2.加载视图
return View();
}
现在调用起来是不是方便了许多。
25、ASP.NET MVC入门到精通——Spring.net-业务层仓储的更多相关文章
- 17、ASP.NET MVC入门到精通——Spring.net入门
Spring.NET环境准备 pring.NET 1.3.2下载地址:http://down.51cto.com/data/861700 下载后解压 Spring.NET-1.3.2.7z:这个里面有 ...
- 26、ASP.NET MVC入门到精通——后台管理区域及分离、Js压缩、css、jquery扩展
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 有好一段时间没更新博文了,最近在忙两件事:1.看书,学习中...2.为公司年会节目做准备,由于许久没有练习双截棍了,难免生疏,所以现在临时抱 ...
- 22、ASP.NET MVC入门到精通——搭建项目框架
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 前面的章节,说了ASP.NET MVC项目中常用的一些技术和知识点,更多的是理论上面的东西,接下来,我将通过一个简单的OA项目来应用我们之前 ...
- 24、ASP.NET MVC入门到精通——数据库仓储
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 业务层调用数据层对象,我不想每次都new一个数据层对象,而是在数据层创建一个仓储,统一管理所有的对象调用. 1.在IDAL项目中,新建IDB ...
- 1、ASP.NET MVC入门到精通——新语法
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 在学习ASP.NET MVC之前,有必要先了解一下C#3.0所带来的新的语法特性,这一点尤为重要,因为在MVC项目中我们利用C#3.0的新特 ...
- 5、ASP.NET MVC入门到精通——NHibernate代码映射
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 上一篇NHibernate学习笔记—使用 NHibernate构建一个ASP.NET MVC应用程序 使用的是xml进行orm映射,那么这一 ...
- 6、ASP.NET MVC入门到精通——ASP.Net的两种开发方式
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 目前,ASP.NET中两种主流的开发方式是:ASP.NET Webform和ASP.NET MVC.从下图可以看到ASP.NET WebFo ...
- 7、ASP.NET MVC入门到精通——第一个ASP.NET MVC程序
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 开发流程 新建Controller 创建Action 根据Action创建View 在Action获取数据并生产ActionResult传递 ...
- 8、ASP.NET MVC入门到精通——View(视图)
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 View视图职责是向用户提供界面.负责根据提供的模型数据,生成准备提供给用户的格式界面. 支持多种视图引擎(Razor和ASPX视图引擎是官 ...
随机推荐
- window系统JDK1.7的快速配置
快速配置java环境变量 右键单击计算机--->属性 点击 "高级系统设置"--->"环境变量",出现环境变量设置窗口 系统变量--->新建 ...
- Android开发学习之路-回调机制学习笔记
不知道是我学Java的时候没有认真听还是怎么的,曾经一直不知道什么是“回调”,它有什么用,百度一大堆,都太复杂看不明白(好吧是我笨),所以想把自己理解的分享给其他看到的人,大家都真正认识一下这个重要的 ...
- sublime text 下的Markdown写作
sublime text 2(3)下的Markdown写作 什么是 Markdown wiki Markdown 是一种方便记忆.书写的纯文本标记语言,用户可以使用这些标记符号以最小的输入代价生成极富 ...
- 没有水果机的也来体验下Visual Studio for Mac
在去年微软已经宣布.NET将实现真正的跨平台,并且发布了Mac和Linux版的Visual Studio Code编辑器,但强大的Visual Studio确只有Windows版. 还坚守.NET开发 ...
- VXLAN 概念(Part I) - 每天5分钟玩转 OpenStack(108)
除了前面讨论的 local, flat, vlan 这几类网络,OpenStack 还支持 vxlan 和 gre 这两种 overlay network. overlay network 是指建立在 ...
- Web APi之认证(Authentication)及授权(Authorization)【一】(十二)
前言 无论是ASP.NET MVC还是Web API框架,在从请求到响应这一过程中对于请求信息的认证以及认证成功过后对于访问页面的授权是极其重要的,用两节来重点来讲述这二者,这一节首先讲述一下关于这二 ...
- Python深入06 Python的内存管理
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 语言的内存管理是语言设计的一个重要方面.它是决定语言性能的重要因素.无论是C语言的 ...
- 小菜学习Winform(六)剪切板和拖放复制
前言 在做winform项目的时候有时候会用到复制粘贴,在.net中提供了Clipboard类来操作剪切板,我们来看下. clipbrd.exe clipbrd是系统剪切板程序,但是在vista及以上 ...
- ViewStub的使用
ViewStub是一个不可见的.大小为0的控件,运行时ViewStub可以滞后加载.当ViewStub置为可见或者调用inflate()的时候,布局就会加载出来.用加载进来的布局取代ViewStub在 ...
- sysv-rc-conf管理Ubuntu server开机启动服务
在RedHat中,都是使用chkconfig来管理服务的,但是在Ubuntu Server中,却有一个更好的工具,chkconfig也是可以使用的.今天来说一下sysv-rc-conf sysv-rc ...