Turbine avec Db4objects.Db4o.Linq.dll donne Impossible de charger un ou plusieurs des types demandé exception

StackOverflow https://stackoverflow.com/questions/1839241

Question

Dans mon application asp.net-mvc Je suis en train de mettre en place Turbine.
Le code d'initialisation se présente comme suit:

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

et j'ai alors un ensemble de bureaux d'enregistrement comparable à celui qui suit:

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

Si j'essaie de courir, je reçois l'erreur suivante, quelque part après la SetLocatorProvider, mais avant d'entrer dans l'une des méthodes de registre:

  

Erreur de serveur dans l'application '/'.

     

Impossible de charger un ou plusieurs des types demandés. Récupérer la propriété LoaderExceptions pour plus d'informations.

     

Description: Une exception non gérée est survenue pendant l'exécution de la demande Web en cours. S'il vous plaît examiner la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

     

Détails de l'exception: System.Reflection.ReflectionTypeLoadException: Impossible de charger un ou plusieurs des types demandés. Récupérer la propriété LoaderExceptions pour plus d'informations.

     

Source Erreur:   Une exception non gérée a été générée pendant l'exécution de la demande Web en cours. Les informations concernant l'origine et l'emplacement de l'exception peut être identifiée à l'aide de la pile d'exception trace ci-dessous.

     

Trace de la pile:

    [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

UPDATE PRECISEE la bibliothèque de problèmes à Db4objects.Db4o.Linq.dll Dès que j'ai cette bibliothèque comme références (même pas « à l'aide », vient d'ajouter à des références) dans l'une de mes bibliothèques qui est évoquées dans ma mvc webapplication je reçois ci-dessus YSOD mentionné. Toutes les autres bibliothèques db4o fonctionnent très bien.

Mettre à JOUR Essayé échange le UnityServiceLocator avec le WindsosServiceLocator et le NinjectServiceLocator. Exactement les mêmes résultats, donc plus de chances que le problème ne provient pas dans l'une des libs.

OPPDATERING Pour recréer la page d'erreur, il suffit de prendre les mesures suivantes:

  • Créer une nouvelle demande Mvc (peu importe la version wat)
  • Code de Alter à utiliser MvcTurbine et ajouter libs nécessaires MvcTurbine
     Vous trouverez tout fonctionne toujours comme prévu
  • Ajouter Db4objects.Db4o.dll
     Pourtant tout fonctionne
  • Ajouter Db4objects.Db4o.linq.dll
     YSOD

Toutes les idées sur où et comment débugger?

Était-ce utile?

La solution

Par souci d'écrire une réponse appropriée. Je pense que vous obtenez un TypeLoadException déclenché par un défaut de charger un ensemble qui est référencé par Db4objects.Db4o.Linq.

En regardant en ildasm montre qu'il exige que les ensembles suivants qui sont livrés avec db4o (utiliser les mêmes ensembles qui sont venus avec Db4objects.Db4o.Linq afin d'éviter tout décalage).

Ces assemblées sont:

  • Mono.Cecil
  • Cecil.FlowAnalysis

Pour mémoire, abd d'aujourd'hui, ils sont utilisés par le LINQ à db4o optimiseur de requêtes pour analyser les propriétés accès dans les requêtes LINQ.

Autres conseils

Pour Turbine pour enregistrer vos types, il doit avoir l'assemblée d'hébergement (Db4objects.Db4o.Linq) et autres ensembles que l'assemblée d'hébergement pourrait faire référence.

La trace de pile dans votre message original dit que lorsque vous essayez de résoudre les types pour quelque chose de votre application n'a pas réussi à résoudre, qui, dans ce cas, il est pas présent.

On dirait un problème avec votre type de cible. Vous pouvez essayer ce qui suit:

  1. Supprimer tous les enregistrements de service et les essayer un à la fois pour déterminer du type qui provoque le problème.
  2. Assurez-vous que vous puissiez réussir instancier le type de cible vous.
  3. Vérifiez que le type de cible ne ont d'autres dépendances qui sont non pris en compte dans votre service inscriptions.

Il serait utile de voir la déclaration et le constructeur (s) du type cible (s).

Essayez de passer à un autre conteneur IoC:

Ajoutez une référence à MvcTurbine.Ninject.dll

Alors:

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

Jeff, MVC Turbine ne supporte actuellement que MVC 1.0, je suis en train d'obtenir un soutien MVC 2.0 pour les .NET 3.5 et .NET 4.0. S'il vous plaît vérifier http://turbineproject.com pour plus d'informations quand ils seront libérés.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top