• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ASP.NET MVC的Model元数据与Model模板:预定义模板发布时间:2022-07-10
下一篇:
Asp.Net缓存清理发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap