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过来,稍微修改一下就可以了

  View Code

8、BLL项目,新建T4模板BLLSession.tt,拷贝之前DAL中的模板DALSession过来,稍微修改一下就可以了

  View Code

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(); }
复制代码

现在调用起来是不是方便了许多。


本文转自邹琼俊博客园博客,原文链接:http://www.cnblogs.com/jiekzou/p/5046546.html,如需转载请自行联系原作者

相关文章
|
5月前
|
JSON 前端开发 Java
Spring MVC入门必读:注解、参数传递、返回值和页面跳转(下)
Spring MVC入门必读:注解、参数传递、返回值和页面跳转(下)
61 0
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
42 0
|
1天前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
|
1月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
29 0
|
1月前
mvc.net分页查询案例——mvc-paper.css
mvc.net分页查询案例——mvc-paper.css
5 0
|
1月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
99 5
|
3月前
|
XML 前端开发 定位技术
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
25 0
|
3月前
|
前端开发
.net core mvc获取IP地址和IP所在地(其实是百度的)
.net core mvc获取IP地址和IP所在地(其实是百度的)
124 0
|
5月前
|
设计模式 前端开发 Java
一篇文章让使你的Spring Mvc学习入门,还不来了解吗?
一篇文章让使你的Spring Mvc学习入门,还不来了解吗?
|
5月前
|
JSON 前端开发 Java
Spring MVC入门必读:注解、参数传递、返回值和页面跳转(上)
Spring MVC入门必读:注解、参数传递、返回值和页面跳转(上)
44 0