я использую:-
я продолжаю не получать 'Конструктора без параметров, определенного для этого объекта'. для моего 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(),
});
}
}
Перестройка Ninject.Web.Mvc против библиотек DLL ASP.Net MVC 2 устранила проблему. Проблема в классе NinjectControllerFactory. Сигнатура метода получения экземпляра контроллера изменилась в MVC 2.
IController GetControllerInstance(Type controllerType)
В
IController GetControllerInstance(
RequestContext requestContext, Type controllerType)
Внесите необходимые изменения и перестройте расширение Ninject MVC, и все работает нормально. Спасибо @Charlino за предложение.
В Ninject вы не должны переопределять метод Application_Start. Если вам нужны вещи, которые не выполняются автоматически (например, регистрация областей - я не знаю, делает ли Ninject это за вас), обязательно вызовите base.OnApplicationStarted ()
для правильной работы всего, что связано с Ninject.
protected override void OnApplicationStarted()
{
base.OnApplicationStarted();
// Kick some butt here
}
Код выглядит правильно, за исключением запятой после 'new ServiceModule ()'.
Он должен быть в Global.asax.cs, а не в Global.aspx.cs.
По какой-то причине я обнаружил, что если ваш 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(),
});
}
}