asp.net-mvc - ninjectwebcommon - ninject in mvc 5
Error de Ninject: el IControllerFactory ''Ninject.Web.Mvc.NinjectControllerFactory'' no devolvió un controlador para el nombre ''Productos'' (2)
Actualice a la última Ninject.Web.Mvc y elimine esta línea:
RegisterAllControllersIn(Assembly.GetExecutingAssembly());
El registro ya no es necesario.
Obtengo la siguiente pantalla amarilla de la muerte "The IControllerFactory ''Ninject.Web.Mvc.NinjectControllerFactory'' no devolvió un controlador para el nombre ''Productos''." ¿Por qué? Aquí está mi configuración
Actualización Esta configuración funciona en mi computadora pero no en la computadora de mi compañero de trabajo aunque nuestras computadoras tengan el mismo código y configuración.
Código
public class MvcApplication : NinjectHttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Products", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
protected override void OnApplicationStarted()
{
RegisterRoutes(RouteTable.Routes);
RegisterAllControllersIn(Assembly.GetExecutingAssembly());
}
protected override IKernel CreateKernel()
{
var modules = new INinjectModule[]
{
new WebModule()
};
return new StandardKernel(modules);
}
}
public class WebModule : NinjectModule
{
public override void Load()
{
Bind<IAuthoringRepository>()
.ToProvider(new AuthoringProvider())
.InSingletonScope();
Bind<ICatalogEntity>()
.ToProvider(new ProductProvider())
.InSingletonScope();
Bind<TargetData>()
.ToProvider(new TargetDataProvider()).InSingletonScope();
}
}
public class AuthoringProvider : Provider<IAuthoringRepository> {
protected override IAuthoringRepository CreateInstance(IContext context)
{
WindowsIdentity identity = WindowsIdentity.GetCurrent();
IAuthoringRepository result = RepositoryFactory.CreateAuthoringRepository(identity);
return result;
}
}
public class TargetDataProvider : Provider<TargetData>
{
protected override TargetData CreateInstance(IContext context)
{
return new TargetData { Language = Language.En, Province = Province.ON };
}
}
public class ProductProvider : Provider<Product>
{
protected override Product CreateInstance(IContext context)
{
return new Product();
}
}
Más sobre el error IControllerFactory ''Ninject.Web.Mvc.NinjectControllerFactory'' no devolvió un controlador para el nombre ''Productos''. Descripción: se produjo una excepción no controlada durante la ejecución de la solicitud web actual. Revise el seguimiento de la pila para obtener más información sobre el error y dónde se originó en el código.
Detalles de la excepción:
System.InvalidOperationException: IControllerFactory ''Ninject.Web.Mvc.NinjectControllerFactory'' no devolvió un controlador para el nombre ''Productos''.
Error de fuente:
Se generó una excepción no controlada durante la ejecución de la solicitud web actual. La información sobre el origen y la ubicación de la excepción se puede identificar utilizando el seguimiento de pila de excepción a continuación.
Stack Trace:
[InvalidOperationException: The IControllerFactory ''Ninject.Web.Mvc.NinjectControllerFactory'' did not return a controller for the name ''Products''.]
System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +365
System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +160
System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +80
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +45
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8837208
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184
prueba esto:
routes.MapRoute(null, "",
new { controller = "Products", action = "Index", }
);
y asegúrese de tener la acción correcta llamada