【问题标题】:Using MEF for pluggable architecture in MVC在 MVC 中使用 MEF 实现可插拔架构
【发布时间】:2009-06-12 14:15:09
【问题描述】:

好的,我遇到了一个奇怪的问题,希望有人能帮忙解决

我有一个基于这个演示的 MVC 项目

http://blogs.msdn.com/hammett/archive/2009/04/23/mef-and-asp-net-mvc-sample.aspx

但是在指定强类型视图时出现问题我收到此错误

Parser Error 
Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately. 

Parser Error Message: Could not load type 'System.Web.Mvc.ViewPage<ForumData>'.

当您像这样指定视图的路径时,我跟踪到它必须这样做

 return View("~/Modules/Forums/Index.aspx",data);

它会给你这个错误,但是如果你把视图放在正常路径下,在这种情况下是“~Views/Forum/Index.aspx ....当像这样指定返回时它工作正常

 return View(data);

那么为什么这很重要,这显然与视图引擎的工作方式以及控制器实际上是应用程序外部的事实有关...请帮助!

编辑: ForumData实际上是ForumExtention.ForumData,我在生成剪切和粘贴错误时犯了一个错误,但无论如何它都会做同样的事情..我只需要获取点对面..

更新:我提供的链接中的示例工作正常,因为它没有使用强类型视图...通过从这里下载来查看我正在使用的实际代码

http://mysql.netpmg.com/MVCandMEF.zip

http://mysql.netpmg.com/forumdb.zip

将 foumdb.zip 重命名为 *.bak,这是一个 SQLEXPRESS 2008 数据库备份。

【问题讨论】:

    标签: asp.net asp.net-mvc mef


    【解决方案1】:

    我找到了原因,但是 ASP.NET 中的那些类不可插入。

    可以在我的博客上找到肮脏的解决方法:修订:ASP.NET MVC 和托管可扩展性框架 (MEF) - http://blog.maartenballiauw.be/post/2009/06/17/Revised-ASPNET-MVC-and-the-Managed-Extensibility-Framework-(MEF).aspx

    【讨论】:

      【解决方案2】:

      ForumData 是否在可访问的命名空间中?名称需要限定吗?

      【讨论】:

      • 是的,它应该是 forumextention.forumdata .. 但我在这里发布的错误只是为了解释我的问题。
      【解决方案3】:

      我对 MEF 一无所知...但是如果您创建自己的稍微调整的视图引擎以查看不同的目录会发生什么?

      例如

      public class CustomViewEngine : WebFormViewEngine
      {
      
          public CustomViewEngine()
          {
              MasterLocationFormats = new[] {
                      "~/Modules/{1}/{0}.master",
                      "~/Views/{1}/{0}.master",
                      "~/Views/Shared/{0}.master"
                  };
              ViewLocationFormats = new[] {
                      "~/Modules/{1}/{0}.aspx",
                      "~/Modules/{1}/{0}.ascx",
                      "~/Views/{1}/{0}.aspx",
                      "~/Views/{1}/{0}.ascx",
                      "~/Views/Shared/{0}.aspx",
                      "~/Views/Shared/{0}.ascx"
                  };
              PartialViewLocationFormats = ViewLocationFormats;
          }
      
      }
      

      然后在 global.asax 中的 Application_Start() 中

      ViewEngines.Engines.Add(new CustomViewEngine());
      

      HTH, 查尔斯

      【讨论】:

      • 我尝试过同样的事情,当我发现它不喜欢我拥有它的视图时......奇怪的是它可以在任何地方,只要它在 Views 文件夹下......我只是不明白.. 这是一个非常奇怪的问题。
      【解决方案4】:

      我下载了您的示例。我将论坛索引移至主网络应用程序中的 utils。效果很好。

      public ActionResult Index()
              {
                  ViewData["forums"] = _forumService.GetEnabledForumsRecentActivity();
      
                  return View("~/Utils/Index.aspx");
                 // return View(ViewRoot + "Index.aspx");
              }
      

      您将它放在示例目录中的哪些特定位置?

      【讨论】:

      • 您是否使用了强类型视图? ViewData["forums"] 方法工作正常..我会发布我正在尝试做的事情。
      猜你喜欢
      • 1970-01-01
      • 2014-01-27
      • 2017-05-17
      • 1970-01-01
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多