ASP.NET MVC 整合 Spring.net(1)- Controller进容器
AddVersionHeader(httpContext);
// Get the controller type
string controllerName = RequestContext.RouteData.GetRequiredString("controller");
// Instantiate the controller and call Execute
IControllerFactory factory = ControllerBuilder.GetControllerFactory();
IController controller = factory.CreateController(RequestContext, controllerName);
if (controller == null) {
throw new InvalidOperationException(
String.Format(
CultureInfo.CurrentUICulture,
MvcResources.ControllerBuilder_FactoryReturnedNull,
factory.GetType(),
controllerName));
}
try {
controller.Execute(RequestContext);
}
finally {
factory.ReleaseController(controller);
}
}
<object id="Demos.Domain.Object">
<property name="Target">
<object type="Demos.Domain.Object,Demos.Domain">
<property name="Manager" ref="Demos.Domain.Manager"/>
</object>
</property>
</object>
</objects>
protected void Application_Start()
{
//用自定义的构造工厂替换默认的
ControllerBuilder.Current.SetControllerFactory(typeof(Demo.Core.ControllerFactory));
RegisterRoutes(RouteTable.Routes);
}
我们自己的Controller工厂的代码
using System.Web.Routing;
using Spring.Context;
namespace Demo.Core
{
public class ControllerFactory : IControllerFactory
{
/// <summary>
/// Default ControllerFactory
/// </summary>
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);
}
}
}
}
Spring.net 容器包装的代码
using System.Collections;
using System.Collections.Generic;
using Spring.Context;
using Spring.Context.Support;
namespace Demo.Core
{
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;
}
}
然后我们再新建个Demos.Controllers的项目。
using System.Web.Mvc;
namespace Demo.Controllers
{
public class DemoController : Controller
{
public ViewResult Index()
{
ViewData["Message"] = "Welcome to IOC MVC";
return View();
}
}
}
<objects xmlns="http://www.springframework.net/">
<object id="DemoController" type="Demo.Controllers.DemoController, Demo.Controllers" singleton="false" >
</object>
</objects>
并把配置文件设置为嵌入资源
然后再在Web.config中添加相应配置
<section name="context" type="Spring.Context.Support.WebContextHandler, Spring.Web" />
<section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
</sectionGroup>
<spring>
<context>
<resource uri="config://spring/objects" />
<resource uri="assembly://Demo.Controllers/Demo.Controllers/Controllers.xml" />
</context>
<objects xmlns="http://www.springframework.net" />
</spring>
转载于:https://www.cnblogs.com/moshe/archive/2010/02/07/1665344.html
ASP.NET MVC 整合 Spring.net(1)- Controller进容器相关推荐
- [ASP.NET MVC 小牛之路]10 - Controller 和 Action (2)
继上一篇文章之后,本文将介绍 Controller 和 Action 的一些较高级特性,包括 Controller Factory.Action Invoker 和异步 Controller 等内容. ...
- ASP.NET MVC vs Spring MVC
C# 是微软出品对标 Java 的语言,在 web 开发方面,二者都在表现层实现了自己的 MVC 框架.从一个简单的项目开始对比,看看二者有何差异. 项目结构 首先来看由 SpringBoot 生成的 ...
- ASP.NET MVC 个人学习笔记之 Controller传值
2019独角兽企业重金招聘Python工程师标准>>> //ControllerViewBag.Message = "Modify this template to jum ...
- Castle Team宣布Castle将与ASP.NET MVC整合
MS宣布推出ASP.NET MVC Framework:http://www.cnblogs.com/Dah/archive/2007/10/08/916958.html 看了看上面的特性,概念几乎是 ...
- 【ASP.NET MVC 学习笔记】- 10 Controller和Action(1)
本文参考:http://www.cnblogs.com/willick/p/3331521.html 1.继承IController接口,示例代码将当前请求的Controller和Action打印到浏 ...
- ASP.NET MVC Controller激活系统详解:默认实现
Controller激活系统最终通过注册的ControllerFactory创建相应的Conroller对象,如果没有对ControllerFactory类型或者类型进行显式注册(通过调用当前Cont ...
- Asp.net MVC 教程汇总
自学MVC看这里--全网最全ASP.NET MVC 教程汇总 MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想 ...
- 简述C#中IO的应用 RabbitMQ安装笔记 一次线上问题引发的对于C#中相等判断的思考 ef和mysql使用(一) ASP.NET/MVC/Core的HTTP请求流程...
简述C#中IO的应用 在.NET Framework 中. System.IO 命名空间主要包含基于文件(和基于内存)的输入输出(I/O)服务的相关基础类库.和其他命名空间一样. System.IO ...
- 一起谈.NET技术,ASP.NET MVC Membership 权限 漫谈
以前一位同事习惯于使用Membership来进行权限管理,现在随着ASP.NET MVC的引入,采用以前的方法,提出了以下方案: ASP.NET MVC+Membership结合,通过在web.con ...
最新文章
- 附庸风雅(2006-10-20 13:39:32)(新浪)
- oracle重新恢复数据库,重新安装oracle根据原数据文件恢复数据库
- sublime-text-2相关快捷键
- flask-sqlalchemy分表解决方案
- 64位浮点数_C语言常见面试题解析(1)——浮点数的比较
- 用C#把文件转换为XML
- tempdb相关文章
- itunes备份包括哪些内容_软件开发项目技术方案包括哪些内容
- 九大Python处理PDF操作
- 电脑开机自动刷新阿里域名对于IP DDNS
- android简繁体切换快捷键,我的Android进阶之旅------Android中如何高效率的进行简繁体转换...
- vue-oss阿里云上传图片
- 实验一. 路由器IP地址配置及直连网络
- Java工程师成神之路~(2018修订版)
- java 爬虫 微博_最新新浪微博爬虫程序Java版 2015
- 《岛》让伤口暴露在空气里吧
- 简单聊聊MD5和SHA-256加密
- java方法头_java方法学习
- 全球最强人工智能创新公司Top100榜单重磅发布!
- 分布式ssh_使用SSH的分布式管理
热门文章
- 数据结构和算法(03)---栈和队列(c++)
- 手写文字识别java_java 手写文字图片识别提取 百度API
- 详细描述三个适于瀑布模型的项目_IT项目管理笔记——方法选择和软件评估
- 基于Mac环境搭建以太坊私有区块链进行挖矿模拟
- Java多线程死锁例子
- 科目三-变更车道,直线行驶和超车的考试标准
- [GCC for C]编译选项---IDE掩盖下的天空
- 如何在 IDEA 启动多个 Spring Boot 工程实例
- lineNumber: 1; columnNumber: 1; 前言中不允许有内容
- 回溯---分割字符串使得每个部分都是回文数