本节介绍如何实现将controller加载进spring容器。首先我们看看配置文件,我就以我做的例子来进行说明先看webConfig,在configuration节点下配置以下内容
<configSections>
        <sectionGroup name="spring">
            <section name="context" type="Spring.Context.Support.WebContextHandler, Spring.Web"/>
            <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core"/>
        </sectionGroup>
        <section name="SpringOverrideProperty" type="System.Configuration.NameValueSectionHandler"/>
        <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
    </configSections>
    <spring>
        <context>
            <resource uri="config://spring/objects"/>
            <resource uri="assembly://SpringDao/SpringDao/spring_hibernate_dao.xml"/>
            <resource uri="assembly://SpringDao/SpringDao/Controller.xml"></resource>
        </context>
        <objects xmlns="http://www.springframework.net"/>
    </spring>
在system.web节点下配置以下内容
<httpModules>
            <add name="Spring" type="Spring.Context.Support.WebSupportModule, Spring.Web"/>
        </httpModules>
        <httpHandlers>
            <add verb="*" path="*.aspx" type="Spring.Web.Support.PageHandlerFactory, Spring.Web"/>
        </httpHandlers>
ok,WebConfig配置完成。再看我写的两个xml,第一个Controller.xml
<?xml version="1.0" encoding="utf-8"?>
<objects xmlns="http://www.springframework.net"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://www.springframework.net http://www.springframework.net/xsd/spring-objects.xsd">
    <object id="ssCode" type="Model.SS_CODE,Model">
        <property name="C_DATA" value="2"></property>
    </object>
    <object id="CodeController" type="Controllers.CodeController,NormalUniversity" singleton="false"    autowire="byName" >
        <property    name="ssCode" ref="ssCode"></property>
    </object>
</objects>
这个文件配置的是Spring要加载进容器的Controller。以及controller中的类(Controllers.CodeController,NormalUniversity,其中Controllers.CodeController是命名空间.类名,NormalUniversity是程序集名称),以及类中的属性。下面是spring_hibernate_dao.xml
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://www.springframework.net http://www.springframework.net/xsd/spring-objects.xsd">

<object id="DbProvider" type="SpringDao.SQLProvider, SpringDao">
        <property name="ConnectionString" value="server=.\sql2k5;uid=sa;pwd=sa123;database=test;" />
    </object>

<object id="SessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate12">
        <property name="DbProvider" ref="DbProvider" />
        <property name="MappingAssemblies">
            <list>
                <value>Model</value>
            </list>
        </property>
        <property name="HibernateProperties">
            <dictionary>
                <entry key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
                <entry key="hibernate.dialect" value="NHibernate.Dialect.MsSql2005Dialect" />
                <entry key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
                <entry key="show_sql" value="true" />
            </dictionary>
        </property>
    </object>

<object id="HibernateTransactionManager" type="Spring.Data.NHibernate.HibernateTransactionManager, Spring.Data.NHibernate12">
        <property name="DbProvider" ref="DbProvider" />
        <property name="sessionFactory" ref="sessionFactory" />
    </object>

<object id="TransactionInterceptor" type="Spring.Transaction.Interceptor.TransactionInterceptor, Spring.Data">
        <property name="TransactionManager" ref="HibernateTransactionManager" />
        <property name="TransactionAttributeSource">
            <object type="Spring.Transaction.Interceptor.AttributesTransactionAttributeSource, Spring.Data" />
        </property>
    </object>
    <object id="DaoHelper" type="Dao.SS_CodeDao,Dao">
        <property name="sessionFactory" ref="sessionFactory" />
    </object>

</objects>

配置了Spring的工厂,拦截器,事务。以及我写的一个Dao类。要实现controller的加载,必须写一个自定义的ControllerFactory实现IControllerFactory接口。代码如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Spring.Context;
using System.Web.Mvc;
using System.Web.Routing;
using System.Web;
namespace SpringDao
{
        public class ControllerFactory : IControllerFactory
        {
                private static DefaultControllerFactory defalutf = null;

                public IController CreateController(RequestContext requestContext, string controllerName)
                {
                        string controller = controllerName + "Controller";
                    
                        IApplicationContext ctx = Container.GetContext();
                        if (ctx.ContainsObject(controller))
                        {
                                object controllerf = ctx.GetObject(controller);
                                return (IController)controllerf;
                        }
                        else
                        {
                                if (defalutf == null)
                                {
                                        defalutf = new DefaultControllerFactory();
                                }

                                return defalutf.CreateController(requestContext, controllerName);
                        }
                }

                public void ReleaseController(IController controller)
                {
                        IApplicationContext ctx = Container.GetContext();

                        if (!ctx.ContainsObject(controller.GetType().Name))
                        {
                                if (defalutf == null)
                                {
                                        defalutf = new DefaultControllerFactory();
                                }

                                defalutf.ReleaseController(controller);
                        }
                }

        }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Spring.Context;
using Spring.Context.Support;
using System.Collections;
namespace SpringDao
{
        public class Container
        {
                /// <summary>
                /// 获取应用程序上下文.
                /// </summary>
                /// <returns><see cref="IApplicationContext"/>应用程序上下文.</returns>
                public static IApplicationContext GetContext()
                {
                        if (FApplicationContext == null)
                        {
                                FApplicationContext = ContextRegistry.GetContext();
                        }
                        return FApplicationContext;
                }

                /// <summary>
                /// 获取应用程序上下文.
                /// </summary>
                /// <param name="name"><see cref="IApplicationContext"/>应用程序上下文名称.</param>
                /// <returns><see cref="IApplicationContext"/>应用程序上下文.</returns>
                public static IApplicationContext GetContext(string name)
                {
                        return ContextRegistry.GetContext(name);
                }

                /// <summary>
                /// 获取对象.
                /// </summary>
                /// <typeparam name="T">对象的类型.</typeparam>
                /// <param name="id">标识.</param>
                /// <returns></returns>
                public static T GetObject<T>(string id)
                {
                        return (T)GetContext().GetObject(id);
                }

                /// <summary>
                /// 获取对象类表.
                /// </summary>
                /// <typeparam name="T">对象的类型.</typeparam>
                /// <returns></returns>
                public static IList<T> GetObjects<T>()
                {
                        IEnumerable items = GetContext().GetObjectsOfType(typeof(T));
                        IList<T> objects = new List<T>();
                        foreach (DictionaryEntry item in items)
                        {
                                objects.Add((T)item.Value);
                        }
                        return objects;
                }

                [ThreadStatic]
                private static IApplicationContext FApplicationContext;

        }
}
这些代码是我从网上直接copy的,直接拿来用。完了之后我们要把controller的工厂重新指定到我们自定义的工厂。
在Global.asax的Application_Start()方法中,加入以下代码
ControllerBuilder.Current.SetControllerFactory(typeof(SpringDao.ControllerFactory));
然后再看看我们的controller
using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Model;
using NHibernate.Expression;
namespace Controllers
{
        public class CodeController : BaseController<SS_CODE>
        {
                private SS_CODE ssCode { set; get; }

                public ActionResult Index()
                {
                        ssCode.C_DATA = "aaaa";
                        return base.Index1("~/Views/System/Code/Index.aspx");
                }
        }
}
在这里我们不用实例化SS_CODE 就可以直接使用其对象。最后讲一下Log4Net。用于在客户端写入日志,配置如下
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
    <logger name="WebLogger">
        <level Value="DEBUG"></level>
        <appender-ref ref="LogFileAppender" />
        <appender-ref ref="RollingLogFileAppender"></appender-ref>
    </logger>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
        <!--日志文件名开头-->
        <file value="App_Data\\Log.txt" />
        <!--是否追加到文件-->
        <appendToFile value="true" />
        <!--混合使用日期和文件大小变换日志文件名-->
        <rollingStyle value="Composite" />
        <!--日期的格式-->
        <datePattern value="yyyyMMdd" />
        <!--最大变换数量-->
        <maxSizeRollBackups value="10" />
        <!--最大文件大小-->
        <maximumFileSize value="1MB" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        </layout>
    </appender>
</log4net>
然后新建一个txt如下
打开Assembly,加入
[assembly: log4net.Config.XmlConfigurator(ConfigFile = @"App_Data\Log4Net.Config.xml", Watch = true)]
在web.config configSections加入以下下配置
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
controller中的代码
ILog lg = log4net.LogManager.GetLogger("WebLogger");
                        {
                                if (lg.IsErrorEnabled)
                                {
                                        lg.Error(this.GetType().ToString()+"xxxx李磊");
                                        
                                }
                        }
我们发现不能写入汉字,晕啊
怎么办呢?找了好久,我才找到这个办法。首先我们把Log4Net.dll给反射出来
反射到F盘下,我们看看反射的程序集
我们展开log4net\Util,打开Transform.cs,注释掉private static Regex INVALIDCHARS哪一行,重新编译生成dll,就可以写入汉字了。

有什么问题联系我QQ:316575647

转载于:https://blog.51cto.com/leelei/326473

asp.net MVC2 初探十一相关推荐

  1. asp.net MVC2 初探四

    今天教大家如何利用ADO.Net 或者linq实现数据增删改查,新建一个项目 using System; using System.Collections.Generic; using System. ...

  2. asp.net MVC2 初探十五

    今天做个简单的登录页面,前些天用Nhibernate实体映射出了不少问题.老板有换ADO.NET ENTITY DATA MODEL 的冲动.先看看实体模型. 接着再看看控制器 using Syste ...

  3. Asp.net MVC2.0系列文章-运行Web MVC2.0 Demo

    安装VS2010 首先安装VS2010,安装过程请参考文章: http://www.cnblogs.com/ywqu/archive/2010/01/27/1657450.html. 创建第一个MVC ...

  4. Asp.Net MVC2.0 Url 路由入门---实例篇

    本篇主要讲述Routing组件的作用,以及举几个实例来学习Asp.Net MVC2.0 Url路由技术. 接着上一篇开始讲,我们在Global.asax中注册一条路由后,我们的请求是怎么转到相应的Vi ...

  5. ASP.NET MVC2+MSSQL+Godaddy

    先感谢一下博客园,在网上浪了这么长时间,现在发现还是博客园的文章技术含量要高一点! 现在言归正传,最近在课外学习ASP.NET MVC,也在微软的官网上学了一些例子教程,现在刚好有机会可以实践一下,一 ...

  6. Asp.net MVC2.0系列文章-MVC简介篇

    使用微软VS工具开发Web应用程序主要有两种方式:一种是常用的创建Asp.net Web Forms,另外一种就是今天着重介绍的Asp.net  MVC. <?XML:NAMESPACE PRE ...

  7. Oxite移植到ASP.NET MVC2 BETA 笔记(关于Html.RenderPartialFromSkin)

    在将Oxite移植到asp.net mvc2 beta平台后,经过一系列有关"方法调用"变更的修正后,终于能够通过编译运行起来了!(移植后的源码参见:http://ecubecms ...

  8. Asp.net MVC2.0系列文章-编辑和删除新闻操作

    上一篇文章,我们简单地完成了新闻内容的展示功能(Asp.net MVC2.0系列文章-显示列表和详细页面操作),此篇文章,我们使用Asp.net MVC2.0实现新闻记录的编辑和删除功能. 创建Vie ...

  9. [ASP.NET MVC2 系列] ASP.NET MVC 之如何创建自定义路由约束

     [ASP.NET MVC2 系列]      [ASP.NET MVC2 系列] ASP.Net MVC教程之<在15分钟内用ASP.Net MVC创建一个电影数据库应用程序>      ...

最新文章

  1. 呼伦湖国家级自然保护区管理局投放草料保野生黄羊过冬
  2. 朴素贝叶斯(NBM,Naive Bayesian Model)为什么朴素又有哪些形式?
  3. lodop打印不显示页码_打印成了最浪费时间的事?5个EXCEL打印技巧让你不在抗拒打印...
  4. iPhone8用的全面屏是什么屏幕?
  5. Tomcat7基于Redis的Session共享
  6. Netty自带的心跳机制——IdleStateHandler
  7. Maven超级详细安装教程ovo
  8. 小白ARM平台移植 USB 蓝牙、交叉编译 bluez-4.95
  9. iOS定位添加大头针
  10. GCTA学习8 | GCTA计算多性状遗传力和遗传相关
  11. Python实例29:利用python自动创建多个Excel表格
  12. 公司企业微信公众号怎么创建小程序?
  13. 踢爆IT劣书出版黑幕——由清华大学出版社之《C语言入门很简单》想到的(1)...
  14. 完美解决Win10“无法登陆到你的账户”问题,无法登录账户的全方面解决方案!
  15. Devart Excel Add-ins Crack
  16. 女程序员,靠脸还是靠技术?
  17. 【问题记录】centos7 nodejs better-SQLite3无法安装
  18. Skynet日志服务
  19. h5页面保存img_从微信H5点击保存图片说起
  20. 5位数的数字黑洞是多少_目前对于6174数字黑洞现象是否有合理的解释或证明?...

热门文章

  1. 机器学习基础:分类vs回归
  2. Tomcat7基于Redis的Session共享实战二
  3. [转载]MIT牛人解说数学体系
  4. [转载]最完整PHP.INI中文版
  5. linux shell脚本编程技巧介绍(一)
  6. Android Prefence 总结
  7. 坚持做一件事情真的很不容易,首先必须要克服惰性!
  8. [O365] Azure Active Directory Sync EVENT ID 906 FAILED While Purging Run History. Invalid Namespace
  9. springboot整合flink
  10. gensim出现segmentation Fault解决方案