ASP.NET MVC 2 Предварительный просмотр 1 - Составление задачи StructureMap Controller Factory

У меня есть проект, для которого я использую StructureMap для инъекции зависимостей. Проект компилируется как проект MVC, но после переноса всего на проект MVC2 я получаю следующую ошибку:

Test.Web.Controllers.StructureMapControllerFactory.GetControllerInstance(System.Type) ': нет подходящего метода для переопределить C:\Test\Web\Controllers\StructureMapControllerFactory.cs 11 40 Test.Web

Вот мой StructureMapControllerFactory:

using System;
using System.Web.Mvc;
using StructureMap;

namespace Test.Web.Controllers
{
    public class StructureMapControllerFactory : DefaultControllerFactory
    {

        protected override IController GetControllerInstance(Type controllerType)**
        {

            IController result = null;
            try
            {
                if (controllerType == null) return base.GetControllerInstance(controllerType);
                result = ObjectFactory.GetInstance(controllerType) as Controller;

            }
            catch (StructureMapException)
            {
                System.Diagnostics.Debug.WriteLine(ObjectFactory.WhatDoIHave());
                throw;
            }

            return result;
        }

    }
}

Я нашел одно сообщение, связанное с этим вопросом, но не предлагало понять, как решить мою проблему: MVC 2 preview 1 - методы с параметрами в контроллере не загружается

Очевидно, что я должен упускать изменения из прогрессии 1.0-2.0, но я не уверен, что изменилось. Любая помощь всегда приветствуется.

Ответ 1

Подпись этого метода изменилась. Теперь есть первый аргумент RequestContext:

protected override IController GetControllerInstance(
    RequestContext requestContext, 
    Type controllerType)

Вам также необходимо изменить свой вызов на base.GetControllerInstance:

if (controllerType == null) 
    return base.GetControllerInstance(requestContext, controllerType);

Ответ 2

Крейг Сунтц здесь очень прав.

Просто убедитесь, что вы не забыли ссылаться на System.Web.Routing, если ваш DI находится в другом проекте, чем у приложения MVC.

По какой-то причине в IDE для меня не было ошибок, но при компиляции я все равно получаю GetControllerInstance. "Не найдено подходящего метода для переопределения".

Как только я исправил недостающую ссылку на сборку System.Web.Routing, все было хорошо...

Ответ 3

Я проследил его с помощью Reflector, и действительно, подпись функции изменяется.

защищенный внутренний виртуальный IController GetControllerInstance (RequestContext requestContext, Type controllerType)

здесь находится MVC 2 dll: C:\Program Files\Microsoft ASP.NET\ASP.NET MVC 2\Assemblies\System.Web.Mvc.dll

Спасибо, он решил мою проблему!