asp.net mvc - 自定义的view引擎和ioc集成
来源:互联网 发布:淘宝卖家早点收到货款 编辑:程序博客网 时间:2024/06/03 02:14
使用自己的view引擎
asp.net mvc 的view引擎提供对asp.net page,usercontrol 的的支持. 你还可以创建自己的view引擎,过程非常简单
1. 实现IView接口,比方说
public class NVelocityView : IView
{
public string ViewName
{
get;
set;
}
public string MasterName
{
get;
set;
}
public object ViewData
{
get;
set;
}
public void RenderView(ViewContext viewContext)
{
//用nvelocity解析模板,这个任务留给大家完成
string context = string.Empty;
context = "解析后的内容";
viewContext.HttpContext.Response.Write(context);
}
}
{
public string ViewName
{
get;
set;
}
public string MasterName
{
get;
set;
}
public object ViewData
{
get;
set;
}
public void RenderView(ViewContext viewContext)
{
//用nvelocity解析模板,这个任务留给大家完成
string context = string.Empty;
context = "解析后的内容";
viewContext.HttpContext.Response.Write(context);
}
}
2. 实现IViewFactory接口
public class NVelocityViewFactory : IViewFactory
{
public IView CreateView(ControllerContext controllerContext, string viewName, string masterName, object viewData)
{
return new NVelocityView { ViewName = viewName ,MasterName=masterName,ViewData=viewData};
}
}
{
public IView CreateView(ControllerContext controllerContext, string viewName, string masterName, object viewData)
{
return new NVelocityView { ViewName = viewName ,MasterName=masterName,ViewData=viewData};
}
}
3. 继承Controller类,在类构造中设置ViewFactory参数
public class HomeController : Controller
{
public HomeController()
{
ViewFactory = new NVelocityViewFactory();
}
[ControllerAction]
public void Index()
{
}
}
{
public HomeController()
{
ViewFactory = new NVelocityViewFactory();
}
[ControllerAction]
public void Index()
{
}
}
依赖注入
4. 实现 IControllerFactory在这里进行依赖注入,比方说调用
public class SpringControlFactory : IControllerFactory
{
public IController CreateController(RequestContext context, System.Type controllerType)
{
string requiredString = (string)context.RouteData.Values["controller"];
return (IController)ContextRegistry.GetContext()[requiredString];
}
}
{
public IController CreateController(RequestContext context, System.Type controllerType)
{
string requiredString = (string)context.RouteData.Values["controller"];
return (IController)ContextRegistry.GetContext()[requiredString];
}
}
5. 设置controlerfactory
代码放到global.asax 的Application_Start中
ControllerBuilder.Current.SetDefaultControllerFactory( typeof(SpringControlFactory));
更新 ControllerBuilder 提供了SetControllerFactory和SetDefaultControllerFactory两个方法, 通常,SetControllerFactory是针对特定的controller类型的, 在这个场景,你想对所有的controller子类生效,就用 SetDefaultControllerFactory
通过依赖注入,我们可以在外部实现修改ViewFactory的功能
<object id="myViewFactory" type="xxx.NVelocityViewFactory,xxx"/>
<object id='Home' type="xxx.HomeController,xxx" singleton="false">
<property name="ViewFactory" ref="myViewFactory"/>
</object>
<object id='Home' type="xxx.HomeController,xxx" singleton="false">
<property name="ViewFactory" ref="myViewFactory"/>
</object>
IControllerFactory 非常重要, 这里,你可以使用dlr ,整合ironpython和ironruby,因为你已经得到controller名,接下来你可以从文件系统中读取对应的ironpython或 ironruby 文件,编译和执行它,返回给asp.net mvc
这个链接 描述了如何host ironruby 2.0 r6
http://blogs.msdn.com/rdawson/archive/2007/11/29/hosting-ironpython-2-0-alpha-6-via-the-dlr.aspx
而codeplex 上有个nwsgi 项目, 你可以参考如何使用ironpython来达成在asp.net实现一个wsgi实现的
大家可以看到,继承自己的view引擎和ioc功能和整合动态语言是非常简单的, asp.net mvc 只是提供了一个简单的层次.对于类似castle 项目,两者更多的是互补而不是竞争.比方说castle的route功能不强 ,orm 不足,更多的是缺少社区的关注. 利用asp.net mvc ,castle 可以更多的将眼光关注到具体的领域问题上.
- asp.net mvc - 自定义的view引擎和ioc集成
- asp.net mvc (4) - 自定义视图引擎 View/ViewEngine
- ASP.NET MVC的Razor引擎:View编译原理
- ASP.NET MVC的Razor引擎一:View编译原理
- ASP.NET MVC 2自定义视图引擎
- Ajax 请求 asp.net mvc 的View
- 【ASP.NET自己写MVC框架】2、初步实现MVC的Controler和View
- Asp.net MVC 使用Autofac的简单使用 IOC
- ASP.NET MVC - View Engines
- Asp.Net MVC 之 View
- ASP.NET MVC中的View
- asp.net mvc - View/ViewEngine
- ASP.NET MVC中的View
- Asp.net mvc View视图
- ASP.NET MVC IOC之Unity攻略
- ASP.NET MVC IOC 之Ninject攻略
- ASP.NET MVC IOC 之Ninject攻略
- ASP.NET MVC IOC 之AutoFac攻略
- 汗汗...
- 如何添加系统中Lib到当前项目
- 令代码简洁的ON_CONTROL_RANGE
- Linux网络层 ip_rcv()函数代码分析
- 消息反射
- asp.net mvc - 自定义的view引擎和ioc集成
- WIN XP 安装参数大揭密
- 美国纽约州政府成立机构 促进宽带上网普及
- Javascript 动态编程--动态设置网页元素是否可见,是否可用,改变大小,动态插入文字,进度条,动态改变背景例子
- 人比设备重要 冗余技术难抵小概率事件
- 看守所里的信息化故事:妙峰山
- 教师被捕 源自“珊瑚虫”软件侵权案
- 专家解析:SaaS是否是昙花一现?
- Sybase“三驾马车”护驾企业CIO