您的位置:首页 > 编程语言 > ASP

asp.net mvc - 自定义的view引擎和ioc集成

2007-12-01 10:05 696 查看

使用自己的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);

}

}

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

}

}

3. 继承Controller类,在类构造中设置ViewFactory参数

public class HomeController : Controller

{

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];

}

}

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>

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 可以更多的将眼光关注到具体的领域问题上.

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: