Использование MEF для сменной архитектуры в MVC - PullRequest
4 голосов
/ 12 июня 2009

Хорошо, у меня странная проблема, которая, я надеюсь, кто-то может помочь с

У меня есть проект 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, я допустил ошибку, когда сгенерировал ошибку, чтобы вырезать и вставить, но он делает то же самое, несмотря ни на что .. Мне просто нужно было получить точку accross ..

Обновление: Пример в ссылке, которую я предоставил, работает нормально, потому что в ней не используется строго типизированное представление ... Проверьте реальный код, с которым я играл, скачав его отсюда

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

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

Переименуйте файл foumdb.zip в * .bak, это резервная копия SQLEXPRESS 2008 DB.

Ответы [ 4 ]

3 голосов
/ 17 июня 2009

Я нашел, почему, но эти классы в ASP.NET не являются подключаемыми.

Грязное решение можно найти в моем блоге: Исправлено: ASP.NET MVC и платформа Managed Extensibility Framework (MEF) - http://blog.maartenballiauw.be/post/2009/06/17/Revised-ASPNET-MVC-and-the-Managed-Extensibility-Framework-(MEF).aspx

0 голосов
/ 15 июня 2009

Я ничего не знаю о MEF ... но что произойдет, если вы создадите свой собственный слегка измененный механизм просмотра для просмотра в других каталогах?

* 1003 Е.Г. *

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;
    }

}

Затем в Application_Start () в вашем global.asax

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

HTHS, Charles

0 голосов
/ 15 июня 2009

Я загружаю ваш образец. Я перенес индекс форума в утилиты основного веб-приложения. все работало нормально.

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

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

В каких конкретно местах вы поместили его в каталоги сэмплов?

0 голосов
/ 12 июня 2009

ForumData находится в доступном пространстве имен? Имя должно быть квалифицированным?

...