Как я получаю ninject 2.0, работающий с asp.net mvc 2?

я использую:-

  1. asp.net mvc дистанционное управление 2
  2. Ninject и ninject asp.net mvc расширение (http://github.com/enkari/ninject.web.mvc)

я продолжаю не получать 'Конструктора без параметров, определенного для этого объекта'. для моего AccountController. AccountController введен с Сервисами. Привязка для этих сервисов определяется в ServiceModule.

См. ниже код для моего MvcApplication в Global.asax.cs.

public class MvcApplication : NinjectHttpApplication // System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Account", action = "Login", id = "" }  // Parameter defaults
        );

    }

    protected override void OnApplicationStarted()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterRoutes(RouteTable.Routes);

        RegisterAllControllersIn(Assembly.GetExecutingAssembly());
    }

    protected override IKernel CreateKernel()
    {
        return new StandardKernel(new INinjectModule[] { 
            new ServiceModule(),
        });
    }
}

6
задан Jitesh Patil 12 February 2010 в 02:11
поделиться

4 ответа

Перестройка Ninject.Web.Mvc против библиотек DLL ASP.Net MVC 2 устранила проблему. Проблема в классе NinjectControllerFactory. Сигнатура метода получения экземпляра контроллера изменилась в MVC 2.

IController GetControllerInstance(Type controllerType)

В

IController GetControllerInstance(
        RequestContext requestContext, Type controllerType)

Внесите необходимые изменения и перестройте расширение Ninject MVC, и все работает нормально. Спасибо @Charlino за предложение.

7
ответ дан 17 December 2019 в 02:28
поделиться

В Ninject вы не должны переопределять метод Application_Start. Если вам нужны вещи, которые не выполняются автоматически (например, регистрация областей - я не знаю, делает ли Ninject это за вас), обязательно вызовите base.OnApplicationStarted () для правильной работы всего, что связано с Ninject.

protected override void OnApplicationStarted()
{
    base.OnApplicationStarted();

    // Kick some butt here
}
-1
ответ дан 17 December 2019 в 02:28
поделиться

Код выглядит правильно, за исключением запятой после 'new ServiceModule ()'.

Он должен быть в Global.asax.cs, а не в Global.aspx.cs.

-1
ответ дан 17 December 2019 в 02:28
поделиться

По какой-то причине я обнаружил, что если ваш global.asax.cs наследуется от NinjectHttpApplication, OnApplicationStarted () не вызывается. Измените OnApplicationStarted (), чтобы переопределить Init (), и он должен работать.

См. Ниже:

public class MvcApplication : NinjectHttpApplication // System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Account", action = "Login", id = "" }  // Parameter defaults
        );

    }

    public override void Init()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterRoutes(RouteTable.Routes);

        RegisterAllControllersIn(Assembly.GetExecutingAssembly());
    }

    protected override IKernel CreateKernel()
    {
        return new StandardKernel(new INinjectModule[] { 
            new ServiceModule(),
        });
    }
}
1
ответ дан 17 December 2019 в 02:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: