Frage

In meiner ASP.NET-MVC-Anwendung versuche ich, Turbine einzurichten.
Der Initialisierungscode lautet wie folgt:

public class MvcApplication : TurbineApplication
{
    static MvcApplication()
    {
        ServiceLocatorManager.SetLocatorProvider(() => new UnityServiceLocator());           
    }
}

Und ich habe dann eine Reihe von Registraren vergleichbar mit dem folgenden:

public class UserRepositoryRegistration : IServiceRegistration
{
    public void Register(IServiceLocator locator)
    {
        locator.Register<IUserRepository, Db4oUserRepository>();
    }
}

Wenn ich versuche, auszuführen, erhalte ich den folgenden Fehler irgendwo nach dem SetLocatorProvider, aber bevor ich eine der Registermethoden eingeheke:

Serverfehler in '/' Anwendung.

Ein oder mehrere der angeforderten Typen kann nicht geladen werden. Abrufen Sie die Eigenschaft loadExexceptions für weitere Informationen ab.

Beschreibung: Bei der Ausführung der aktuellen Webanforderung trat eine unberechtigte Ausnahme auf. Bitte überprüfen Sie die Stack Trace für weitere Informationen zum Fehler und wo er im Code stammt.

Ausnahmedetails: System.reflection.ReflectionTypeloadexception: Ein oder mehrere der angeforderten Typen kann nicht geladen werden. Abrufen Sie die Eigenschaft loadExexceptions für weitere Informationen ab.

Quellfehler: Während der Ausführung der aktuellen Webanforderung wurde eine nicht behandelte Ausnahme generiert. Informationen zum Ursprung und zum Ort der Ausnahme können mit der folgenden Ausnahmestapelverfolgung identifiziert werden.

Stack Trace:

    [ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.]
       System.Reflection.Module._GetTypesInternal(StackCrawlMark& stackMark) +0
       System.Reflection.Assembly.GetTypes() +105
       MvcTurbine.ComponentModel.DefaultAutoRegistrator.AutoRegister(ServiceRegistration serviceRegistration) +338
       MvcTurbine.Web.RotorContext.ProcessAutomaticRegistration(AutoRegistrationList registrationList) +155
       MvcTurbine.Web.RotorContext.AutoRegistrationForContext() +163
       MvcTurbine.Web.RotorContext.Turn() +37
       MvcTurbine.Web.TurbineApplication.ExecuteContext() +43
       MvcTurbine.Web.TurbineApplication.TurnRotor() +65
       MvcTurbine.Web.TurbineApplication.Application_Start(Object sender, EventArgs e) +85

AKTUALISIEREN
Eingrenzte die Problembibliothek auf db4Objects oben erwähnt ySod. Alle anderen DB4O -Bibliotheken funktionieren gut.

Mettre à jour
Versuchte, den UnityServicelocator mit dem WindSoServicelocelocator und dem NinjectServicelocator auszutauschen. Genauere Ergebnisse, so wahrscheinlich ist wahrscheinlich das Problem in keiner der LIBs.

Oppdatering
Um die Fehlerseite neu zu erstellen, reicht es aus, die folgenden Schritte auszuführen:

  • Erstellen Sie eine neue MVC -Anwendung (spielt keine WAT -Version).
  • Alter gloabal.asax.cs Code zur Verwendung von MVCTURBINE und hinzufügen Sie benötigte MVCTURBINE -LIBS
    Sie werden feststellen, dass alles immer noch wie erwartet funktioniert
  • Fügen Sie db4Objects.db4o.dll hinzu
    Trotzdem funktioniert alles
  • Fügen Sie db4Objects.db4o.linq.dll
    YSod

Irgendwelche Ideen, wo und wie ich das debuggen?

War es hilfreich?

Lösung

Um eine richtige Antwort aufzuschreiben. Ich denke, Sie erhalten eine Typeloadexception, die durch ein Versagen einer Baugruppe ausgeladen wird, auf die db4Objects.db4o.linq verwiesen wird.

Wenn Sie es in Iildasm betrachten, zeigt es, dass die folgenden Baugruppen, die mit DB4O geliefert werden (verwenden Sie dieselben Baugruppen, die mit db4Objects.db4o.linq geliefert wurden, um eine Nichtübereinstimmung zu vermeiden).

Diese Baugruppen sind:

  • Mono.cecil
  • Cecil.Flowanalysis

Für den Datensatz, ABD, werden ab heute vom LINQ zum DB4O -Query -Optimierer verwendet, um den Zugriff auf den Eigenschaften in LINQ -Abfragen zu analysieren.

Andere Tipps

Damit Turbine Ihre Typen registriert, muss die Hosting -Montage (db4Objects.db4o.linq) und andere Versammlungen auf die Hosting -Baugruppe verweisen.

Die Stapelverfolgung in Ihrem ursprünglichen Beitrag besagt, dass beim Versuch, die Typen für Ihre Anwendung zu lösen, etwas nicht behoben hat, was in diesem Fall nicht vorhanden ist.

Klingt nach einem Problem mit Ihrem Zieltyp. Sie könnten Folgendes ausprobieren:

  1. Entfernen Sie alle Serviceregistrierungen und versuchen Sie sie jeweils einzeln, um den Typ zu bestimmen, der das Problem verursacht.
  2. Stellen Sie sicher, dass Sie den Zieltyp selbst erfolgreich instanziieren können.
  3. Stellen Sie sicher, dass der Zieltyp keine anderen Abhängigkeiten enthält, die in Ihren Service -Registrierungen nicht berücksichtigt werden.

Es wäre hilfreich, die Deklaration und den Konstruktor der Zieltyp (n) zu sehen.

Versuchen Sie, zu einem anderen IOC -Container zu wechseln:

Fügen Sie eine Referenz auf mvcturbine.ninject.dll hinzu

Dann:

public class MvcApplication : TurbineApplication
{
    static MvcApplication()
    {
        //ServiceLocatorManager.SetLocatorProvider(() => new UnityServiceLocator());           
        ServiceLocatorManager.SetLocatorProvider(() => new NinjectServiceLocator()); 
    }
}

Jeff, MVC -Turbine unterstützt derzeit nur MVC 1.0. Ich bin gerade dabei, MVC 2.0 sowohl für .NET 3.5 als auch für .NET 4.0 zu unterstützen. Bitte prüfen http://turbineproject.com Informationen, wenn sie veröffentlicht werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top