你的位置:首页 > ASP.net教程

[ASP.net教程]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 、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./>  </context> </spring>

Web项目中创建一个名为 Config 的文件夹,以保存独立的配置文件

<??><objects ="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, 1);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;} <#}#> }}

View Code

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, 1);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=0;  // Emit Entity Typesforeach (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<#}#>}}

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(); }

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