在MEC中使用MEF实现可插拔架构

时间:2009-06-12 14:15:09

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

好的我有一个奇怪的问题,我希望有人可以提供帮助

我有一个基于此演示的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数据库备份。

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

ForumData位于可访问的命名空间中?名称是否需要合格?

答案 2 :(得分:0)

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

E.g。

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());

HTHS, 查尔斯

答案 3 :(得分:0)

我下载了你的样本。我将论坛索引移动到主Web应用程序中的utils。它运作良好。

public ActionResult Index()
        {
            ViewData["forums"] = _forumService.GetEnabledForumsRecentActivity();

            return View("~/Utils/Index.aspx");
           // return View(ViewRoot + "Index.aspx");
        }

您将哪些具体位置放在样本的目录中?