Asp.net mvc 3 如果ViewEngines集合中有多个引擎,MVC3如何选择要使用的ViewEngine?

Asp.net mvc 3 如果ViewEngines集合中有多个引擎,MVC3如何选择要使用的ViewEngine?,asp.net-mvc-3,viewengine,Asp.net Mvc 3,Viewengine,我有一个内部开发的自定义视图引擎。在同一个项目中,我想对一些页面使用Razor,对一些页面使用我的自定义引擎。MVC框架如何选择使用哪个引擎?顺便说一句,我的自定义引擎不需要任何模板,它根据数据库中的元数据呈现页面。对于我的自定义引擎,我不想设置任何模板文件。 我所期望的是,应该有一种基于控制器名称和操作名称驱动框架使用特定引擎的方法。 MVC3中是否存在这种灵活性?我认为最简单的方法是实现IViewPageActivator,以及 我认为从Create方法返回null将使其稍后默认为默认的IV

我有一个内部开发的自定义视图引擎。在同一个项目中,我想对一些页面使用Razor,对一些页面使用我的自定义引擎。MVC框架如何选择使用哪个引擎?顺便说一句,我的自定义引擎不需要任何模板,它根据数据库中的元数据呈现页面。对于我的自定义引擎,我不想设置任何模板文件。 我所期望的是,应该有一种基于控制器名称和操作名称驱动框架使用特定引擎的方法。
MVC3中是否存在这种灵活性?

我认为最简单的方法是实现
IViewPageActivator
,以及

我认为从
Create
方法返回null将使其稍后默认为默认的
IViewPageActivator
。您将其注入到依赖解析程序中


如果您将依赖项注入框架用作NInject或Unity,那么使用起来可能会更容易。

您的视图引擎应该实现该接口。使用
ViewEngines.Engines.Add()
方法注册视图引擎后,MVC框架将在需要视图引擎渲染视图时调用

多视图引擎并排运行是绝对可能的。如果不希望在特定情况下使用视图引擎,请
返回新的ViewEngineResult(新字符串[0])
FindView
FindPartialView
和MVC将选择另一个视图引擎。如果确实希望使用视图引擎,则返回一个有效的指向要返回结果的视图类(正在实现)的指针


useCache
参数有一些细节。如果您想了解更多,Louis DeJardin在TechEd 2011上做了一个关于构建自己的视图引擎的精彩演示。您可以在第9频道找到的视频。

是。我正在使用Unity的依赖注入。您能解释一下如何通过实现IViewPageActivator来解决这个问题吗。如果向IViewPageActivator添加任何自定义实现,那么这里也同样存在我发布的问题。我可以有多个IViewPageActivator吗?如何配置一个或另一个?我不知道您是否可以有多个IViewPageActivator,但实现解决此问题的自定义IViewPageActivator应该不难。另外,我认为返回null将导致默认值生效。谢谢Marco。“如果不希望在特定情况下使用视图引擎,请从FindView或FindPartialView返回新的ViewEngineResult(新字符串[0]),MVC将选择另一个视图引擎。”。这确实很有效。但是,当我确切地知道在某些情况下也使用哪个引擎时,就不必访问我的定制引擎了。可能MVC设计师没有想到这种情况。再次感谢!