2015-08-14 9 views
5

Sto registrando i miei tipi per convenzione, ma alcuni tipi degli altri miei assembly non si registrano in modo coerente. A volte sono registrati, mentre altre volte non lo sono. Non sta fallendo costantemente. Ecco alcuni dati di traccia:È questo il modo giusto per registrare i tipi in Unity usando un approccio basato sulla convenzione?

... è un'interfaccia e non può essere costruita. Ti manca una mappatura del tipo ?

Desidero eliminare le dll di terze parti e simili dal mio processo di registrazione. È questo il modo giusto per farlo?

public static class UnityConfig 
{ 
    public static void RegisterComponents() 
    { 
     var container = new UnityContainer(); 

     container.RegisterTypes(
     AllClasses.FromLoadedAssemblies().Where(t => t.Namespace != null && t.Namespace.StartsWith("MY NAMESPACEs ONLY")), 
     WithMappings.FromMatchingInterface, 
     WithName.Default); 

     GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container); 
    } 
} 

MODIFICA: questo accade in modo casuale anche quando rimuovo il filtro "Dove". Ho usato questa metodologia di registrazione prima e questo non è mai successo. Cosa sta succedendo?

risposta

1

Mi sono accorta di questo e ho capito che era AllClasses.FromLoadedAssemblies() che non funzionava come previsto (probabilmente funzionava come previsto, ma non come me l'aspettavo). Lo sembrava mentre caricava gli assembly in un ordine diverso in ambienti diversi. Non ero in grado di capire la soluzione per questo, ma ho trovato una soluzione alternativa.

La soluzione nel mio caso era evitare AllClasses.FromLoadedAssemblies() utilizzando BuildManager.GetReferencedAssemblies().

.RegisterTypes(
    AllClasses.FromAssemblies(
      BuildManager.GetReferencedAssemblies().Cast<Assembly>()), 
    WithMappings.FromMatchingInterface, 
    WithName.Default, 
    overwriteExistingMappings: true); 

vedere la domanda originale che risolto nel mio caso qui: Unity registration fails after iisreset

+0

Questo è interessante. Ci proverò e vedrò cosa succede. –

+0

Per favore fatemi sapere. Può benissimo essere un altro problema. Ma questo era il problema nel mio caso. In bocca al lupo! – smoksnes