Ich habe ein neues MVC3-Projekt erstellt, F5 gedrückt und die Beispielseite gesehen.
Dann habe ich NuGet verwendet, um die Ninject.MVC-Erweiterung zu erhalten . Ich habe meine global.asax gemäß der Ninject-Dokumentation, So richten Sie eine MVC3-Anwendung ein :
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);
}
}
Wenn ich jetzt die App starte, wird der gelbe Bildschirm des Todes mit der folgenden Ausnahme angezeigt:
InvalidOperationException - Die Sequenz enthält keine Elemente.
bei System.Linq.Enumerable.Single (...)
bei Ninject.Web.Mvc.Bootstrapper.Initialize (...) Zeile 67.
Und tatsächlich ruft Zeile 67 dieser Datei .Single () auf und löst so die Ausnahme aus.
Was mache ich falsch?
quelle
NinjectHttpApplication
) und den Kernel in der~/App_Start/NinjectMVC3.cs
Datei (RegisterServices
Methode) konfigurieren .Ich muss noch hinzufügen, in der Hoffnung, dass jemand anderes das Problem schneller löst und nicht jede Haarsträhne auf dem Kopf herausziehen möchte, wie ich es fast getan hätte.
Ich musste alles in meinem Projekt umbenennen, um neuen Geschäftsbedingungen zu entsprechen. Ich habe überall Namespaces geändert und sogar den Assembly-Namen (Rechtsklick auf Projekt> Eigenschaften> Registerkarte Anwendung) geändert, damit die generierte Assembly der neuen Namenskonvention entspricht. Die Umbenennung der Versammlung machte Ninject sehr wütend!
Durch Umbenennen der Assembly, die generiert wird, wurde beim Kompilieren eine neue Datei mit dem neuen Namen erstellt. Die alte Datei mit dem alten Namen befand sich jedoch noch im bin-Verzeichnis! Wenn Ninject über die hinzugefügte Klasse in App_Start aktiviert wird, wird diese Aktivierungsklasse in BEIDEN Assemblys (alte UND neue umbenannte) aufgerufen. Fragen Sie mich nicht wie oder warum, aber es tut es und es gibt Ihnen diesen "bereits initialisierten" Fehler.
Nicht einmal die Reinigungslösung funktioniert, da Visual Studio nur die von ihm generierten Binärdateien entfernt, dh die neu umbenannten. Es lässt die Alten allein und sitzt einfach da.
Löschen Sie Ihren Bin-Ordner, bevor Sie etwas anderes versuchen! Ich hoffe, das erspart jemand anderem wertvolle Arbeitsstunden!
quelle
Ich habe das in Ihrer Frage verlinkte Dokumentations-Wiki aktualisiert, um beide Möglichkeiten zum Einrichten einer MVC3-Anwendung aufzuzeigen. Ich schlage vor, die zweite Option zu verwenden, die der bevorzugte Weg für das NuGet-Paket ist.
Anstatt von NinjectHttpApplication abzuleiten, wird NinjectMVC.cs im AppStart-Ordner verwendet, der während der Installation des Pakets erstellt wird. Dies ist auch der Ort, an dem Sie den Kernel erstellen und Ihre Module laden oder an dem Sie die Bindungen definieren.
quelle
Wie Alex Ford sagte:
Ich hatte eine spezielle Version dieses Problems, die wie folgt gelöst werden konnte:
quelle
Meine Lösung bestand darin, dass ich die Ordnereigenschaft App_Start, Namespace Provider, auf True gesetzt hatte.
Ich hatte dies in False geändert, damit Resharper den Namespace nicht hervorhebt, der NICHT mit der Ordnerstruktur übereinstimmt.
quelle
Wollte noch eine Ursache hinzufügen ...
Wir haben das Ninject.MVC3-Paket in mehreren Projekten installiert - von denen nur eines eine tatsächliche MVC-Anwendung war. Wir haben jedoch vergessen, den Ordner App_Start zu entfernen.
Durch Entfernen des Ordners App_Start aus dem referenzierten Projekt wurde das Problem behoben.
quelle
Um auf die Antwort von @ Chev einzugehen ... das war auch mein ultimatives Problem. Wenn Sie auf einer Azure-Website (jetzt AppSite) bereitstellen, möchten Sie in der Veröffentlichung auf dieses Feld klicken, um alte Dateien zu entfernen
quelle