Domanda

Nella mia applicazione asp.net-mvc Sto cercando di creare turbina.
Il codice di inizializzazione è la seguente:

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

e ho poi una serie di registrar paragonabile a quello seguente:

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

Se provo a correre, ottengo il seguente errore da qualche parte dopo la SetLocatorProvider, ma prima di entrare in uno qualsiasi dei metodi di registro:

  

Errore del server in '/' applicazione.

     

Impossibile caricare uno o più dei tipi richiesti. Recuperare la proprietà LoaderExceptions per ulteriori informazioni.

     

Descrizione: Un'eccezione non gestita durante l'esecuzione della richiesta Web corrente. Si prega di rivedere l'analisi dello stack per ulteriori informazioni sull'errore e dove ha avuto origine nel codice.

     

Dettagli eccezione: System.Reflection.ReflectionTypeLoadException: Impossibile caricare uno o più dei tipi richiesti. Recuperare la proprietà LoaderExceptions per ulteriori informazioni.

     

errore Origine:   Un'eccezione non gestita veniva generata durante l'esecuzione della richiesta Web corrente. Per informazioni sull'origine e la posizione dell'eccezione può essere identificato utilizzando lo stack eccezione traccia di seguito.

     

Analisi dello stack:

    [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

Aggiorna
Ristretto la biblioteca problema Db4objects.Db4o.Linq.dll Appena ho questa libreria come riferimenti (nemmeno "utilizzando", appena aggiunto ai riferimenti) in una delle mie librerie che viene fatto riferimento nel mio webapplication mvc ho la suddetta YSOD. Tutte le altre librerie db4o funzionano bene.

mettre À JOUR
Ho provato scambiando l'UnityServiceLocator con la WindsosServiceLocator e la NinjectServiceLocator. Esattamente lo stesso risultato, quindi più che probabile che il problema non ha origine in una delle librerie.

OPPDATERING
Per ricreare la pagina di errore è sufficiente adottare le seguenti misure:

  • Crea nuova applicazione MVC (non importa la versione wat)
  • Codice Alter gloabal.asax.cs utilizzare MvcTurbine e aggiungere librerie MvcTurbine necessari
     Troverete tutto ancora funziona come previsto
  • Aggiungi Db4objects.Db4o.dll
     Ancora tutto funziona
  • Aggiungi Db4objects.Db4o.linq.dll
     YSOD

Tutte le idee su dove e come eseguire il debug di questo?

È stato utile?

Soluzione

Per il bene di scrivere una risposta adeguata. Credo che stai ricevendo un TypeLoadException innescato da un fallimento per caricare un assembly a cui fa riferimento Db4objects.Db4o.Linq.

Guardando in ildasm dimostra che sono necessari i seguenti gruppi forniti con db4o (utilizzare gli stessi assiemi fornite con Db4objects.Db4o.Linq per evitare eventuali disallineamenti).

Queste assemblee sono:

  • Mono.Cecil
  • Cecil.FlowAnalysis

Per la cronaca, abd ad oggi, sono utilizzati dal LINQ to db4o Query Optimizer per analizzare le proprietà di accesso a query LINQ.

Altri suggerimenti

Al fine di turbina per registrare i tuoi tipi, ha bisogno di avere il gruppo di hosting (Db4objects.Db4o.Linq) ed eventuali altre assemblee che l'assemblea di hosting potrebbe fare riferimento.

L'analisi dello stack nel tuo post originale dice che quando si cerca di risolvere i tipi per la vostra applicazione qualcosa non è riuscito a risolvere, che in questo caso non è presente.

Suona come un problema con il tipo di target. Si potrebbe provare il seguente:

  1. Rimuovi tutte le registrazioni di servizio e provarli uno alla volta per determinare il tipo che causa il problema.
  2. garantire che si può con successo istanziare il tipo di destinazione te stesso.
  3. Verificare che il tipo di destinazione non lo fa avere altre dipendenze che sono non contabilizzati nel vostro servizio registrazioni.

Sarebbe utile vedere la dichiarazione e costruttore di (s) del tipo di destinazione (s).

Provare a passare ad un altro contenitore IoC:

Aggiungere un riferimento alla MvcTurbine.Ninject.dll

Quindi:

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

Jeff, MVC Turbina attualmente supporta solo MVC 1.0, sono in procinto di ottenere il sostegno MVC 2.0 sia per .NET 3.5 e .NET 4.0. Si prega di verificare http://turbineproject.com per informazioni quando saranno rilasciati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top