• Spring.net-业务层仓储


    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.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

    <#@ 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 = @"..MODELOA.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过来,稍微修改一下就可以了

     View Code

    <#@ 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 = @"..MODELOA.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 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(); }
    复制代码

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

  • 相关阅读:
    大神语录1 如何滑动fragmentmanager里面一个fragment里面的viewgroup---dispatchTouchEvent 、onInterceptTouchEvent 、onTouchEvent
    转载-好的简历
    安卓开发8- 安卓开源项目整理github
    安卓开发7-网络通信-如何使用webservice
    安卓开发6 -Viewpager+fragment更新数据
    leetcode rotatenumber
    Java程序执行时间的简单方法
    LeetCode happyint
    安卓开发5-fragment和activity
    [转]深入理解AsyncTask的工作原理
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/5049799.html
Copyright © 2020-2023  润新知