2015-08-14 7 views
5

Ich registriere meine Typen per Konvention, aber einige Typen aus meinen anderen Assemblys registrieren nicht konsistent. Manchmal sind sie registriert, während andere nicht. Es ist nicht konsequent versagt. Hier einige Trace-Daten:Ist dies der richtige Weg, um Typen in Unity zu registrieren, indem ein konventionsbasierter Ansatz verwendet wird?

... ist eine Schnittstelle und kann nicht konstruiert werden. Vermissen Sie einen Typ Zuordnung?

Ich möchte 3rd Party Dlls und solche aus meinem Registrierungsprozess entfernen. Ist das der richtige Weg?

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); 
    } 
} 

EDIT: Dies geschieht auch zufällig, als ich die "Wo" Filter zu entfernen. Ich habe diese Registrierungsmethode schon einmal benutzt und das ist NIE passiert. Was ist los?

Antwort

1

Ich stolperte darüber selbst und erkannte, dass es AllClasses.FromLoadedAssemblies() war, die nicht wie erwartet funktionierte (Es funktionierte wahrscheinlich wie beabsichtigt, nur nicht, wie ich es erwartet hatte). Es schien, da es die Baugruppen in einer anderen Reihenfolge in verschiedenen Umgebungen geladen wurde. Ich war nicht in der Lage, die Lösung dafür zu finden, aber ich fand einen Workaround. Die Lösung in meinem Fall war AllClasses.FromLoadedAssemblies() mit BuildManager.GetReferencedAssemblies() zu vermeiden.

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

Siehe die ursprüngliche Frage, die es in meinem Fall hier gelöst: Unity registration fails after iisreset

+0

Das ist interessant. Ich werde es versuchen und sehen, was passiert. –

+0

Bitte lassen Sie es mich wissen. Es kann sehr wohl ein anderes Problem sein. Aber das war das Problem in meinem Fall. Viel Glück! – smoksnes