Creé un nuevo proyecto MVC3, presioné F5, vi la página de muestra.
Luego usé NuGet para obtener la extensión Ninject.MVC . Modifiqué mi global.asax de acuerdo con la documentación de Ninject, Cómo configurar una aplicación MVC3 :
public class MvcApplication : NinjectHttpApplication
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index",
id = UrlParameter.Optional });
}
protected override IKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Load(Assembly.GetExecutingAssembly());
return kernel;
}
protected override void OnApplicationStarted()
{
base.OnApplicationStarted();
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
}
Ahora, cuando ejecuto la aplicación, aparece la pantalla amarilla de la muerte con la siguiente excepción:
InvalidOperationException: la secuencia no contiene elementos.
en System.Linq.Enumerable.Single (...)
en Ninject.Web.Mvc.Bootstrapper.Initialize (...) línea 67.
Y efectivamente , la línea 67 de ese archivo llama a .Single (), lanzando así la excepción.
¿Qué estoy haciendo mal?
fuente
NinjectHttpApplication
) y configurando el kernel en el~/App_Start/NinjectMVC3.cs
archivo (RegisterServices
método).Tengo que agregar a esto con la esperanza de que alguien más resuelva el problema más rápidamente y no quiera arrancar cada mechón de cabello de su cabeza como casi lo hice.
Necesitaba cambiar el nombre de todo en mi proyecto para que coincidiera con los nuevos términos comerciales. Cambié los espacios de nombres en todas partes e incluso cambié el nombre del ensamblaje (haga clic con el botón derecho en el proyecto> propiedades> pestaña de la aplicación) para que el ensamblaje generado coincida con la nueva convención de nomenclatura. ¡El cambio de nombre de la asamblea es lo que enfureció mucho a Ninject!
Al cambiar el nombre del ensamblado que se genera, se estaba creando un nuevo archivo con el nuevo nombre cuando compilamos. Sin embargo, el archivo antiguo con el nombre antiguo todavía estaba en el directorio bin. Si tiene Ninject activándose a través de la clase agregada en App_Start, esta clase de activación se invocará en AMBOS ensamblados (el antiguo Y el nuevo renombrado). No me preguntes cómo ni por qué, pero lo hace y te da este error "ya inicializado".
Ni siquiera la solución de limpieza funciona porque Visual Studio solo eliminará los binarios que está generando, que serían los nuevos renombrados. Deja a los viejos solos allí sentados.
¡Ve a eliminar tu carpeta bin antes de intentar hacer cualquier otra cosa! ¡Espero que esto evite que otra persona pierda valiosas horas de trabajo!
fuente
He actualizado la documentación Wiki vinculada en su pregunta para mostrar ambas formas de configurar una aplicación MVC3. Sugiero usar la segunda opción, que es la forma preferida para el paquete NuGet.
En lugar de derivar de NinjectHttpApplication, está utilizando NinjectMVC.cs en la carpeta AppStart que se crea durante la instalación del paquete. Esta es también la ubicación donde crea el kernel y donde carga sus módulos o donde define los enlaces.
fuente
Como dijo Alex Ford:
Tenía una versión especial de ese problema que podría resolverse de la siguiente manera:
fuente
Mi solución fue que había configurado la propiedad de la carpeta App_Start, Proveedor de espacio de nombres en True.
Había cambiado esto a Falso para que Resharper no resaltara el espacio de nombres que NO coincide con la estructura de la carpeta.
fuente
Quería agregar una causa más ...
Instalamos el paquete Ninject.MVC3 en varios proyectos, solo uno de los cuales era una aplicación MVC real. Sin embargo, olvidamos eliminar la carpeta App_Start.
La eliminación de la carpeta App_Start del proyecto al que se hace referencia resolvió el problema.
fuente
Para agregar a la respuesta de @ Chev ... este también fue mi problema final. Si está implementando en un sitio web de Azure (ahora llamado AppSite), desea hacer clic en este cuadro en la publicación para eliminar archivos antiguos.
fuente