ASP.NET MVC中单独程序集中的视图

时间:2020-03-05 18:41:28  来源:igfitidea点击:

我正在尝试创建一个Web应用程序,希望能够在其中插入单独的程序集。我将MVC Preview 4与Unity结合使用以进行依赖项注入,该过程用于从插件程序集创建控制器。我正在使用WebForms(默认aspx)作为视图引擎。

如果要使用视图,则由于ASPX部件的动态编译,我将停留在核心项目中定义的视图上。我正在寻找一种将ASPX文件封装在不同程序集中的正确方法,而不必执行整个部署步骤。我缺少明显的东西吗?还是我应该以编程方式创建视图?

更新:我更改了接受的答案。即使Dale的答案很彻底,我还是选择了其他虚拟路径提供程序来寻求解决方案。我认为,它的工作原理就像一种魅力,仅占用大约20行代码。

解决方案

回答

本质上,这与使用WebForms并尝试将其UserControl ASCX文件编译为DLL的人们是同样的问题。我发现此http://www.codeproject.com/KB/aspnet/ASP2UserControlLibrary.aspx也可能对我们有用。

回答

protected void Application_Start()
{
    WebFormViewEngine engine = new WebFormViewEngine();

    engine.ViewLocationFormats = new[] { "~/bin/Views/{1}/{0}.aspx", "~/Views/Shared/{0}.aspx" };
    engine.PartialViewLocationFormats = engine.ViewLocationFormats;

    ViewEngines.Engines.Clear();
    ViewEngines.Engines.Add(engine);

    RegisterRoutes(RouteTable.Routes);
}

将视图的"复制到输出"属性设置为"始终复制"

回答

所有仍在寻找圣杯的人的补充:如果我们不太喜欢Webforms视图引擎,那么我离找到它要更近了。

我最近尝试了Spark视图引擎。除了非常出色而且即使受到威胁我也不会回到webforms,它还为应用程序的模块化提供了一些非常好的挂钩。他们的文档中的示例使用Windsor作为IoC容器,但是如果我们想采用其他方法,我无法想象它会变得很难。