Unity 3 und Fehler "Der Typname oder Alias" xxxxx "konnte nicht aufgelöst werden. Bitte überprüfen Sie Ihre Konfigurationsdatei und bestätigen Sie diesen Typnamen. "

8

Gibt es eine Möglichkeit, dieses Problem mit Unity 3 zu lösen?

Ich habe alles gemacht, was möglich ist, um diesen Nachrichtenfehler zu umgehen, aber ich kann nicht auflösen ... Ich versuche zwei Tage zu lösen, und habe bereits alles gemacht, was ich in Google-Suchen gesehen habe.

Ich gebe fast auf und probiere eine andere DI-Lösung aus. Bitte, jede Hilfe wird gut ...

Meine Konfigurationsdatei:

%Vor%

Meine Schnittstelle:

%Vor%

Meine konkrete Klasse:

%Vor%

Mein Global.asax:

%Vor%

Meine Bootstrapper-Klasse:

%Vor%

Meine statische Klasse für das Abhängigkeitsprojekt:

%Vor%

Meine UI-Modellklassendatei im MVC 4-Projekt. Ich benutze 4.5 Framework.

%Vor%

Ich denke, alles ist in der richtigen Art und Weise. Aber ich kann nicht sehen, dass dieser DI funktioniert, weil ich einen Fehler nur im Mapping-Prozess, unten in meiner Bootstrapper-Klasse, der BuildUnityContainer-Methode, bekommen habe:

var container = new UnityContainer () .LoadConfiguration (unitySection);

Der Fehler ist:

  

Der Typname oder Alias ​​Biblioteca.Contracts.IManterCategoriaBO könnte   nicht gelöst werden. Bitte überprüfen Sie Ihre Konfigurationsdatei und verifizieren Sie dies   Geben Sie den Namen ein.

Ich habe alle meine Klassen doppelt überprüft und für mich sind sie in Ordnung. Oder fehlt etwas?

Ich brauche Hilfe, denn ich habe eine kurze Zeit, um mich darum zu kümmern ....

Grüße, Marcelo.

    
Olivertech 06.09.2013, 23:55
quelle

6 Antworten

12

Das Problem liegt in Ihrer Konfigurationsdatei. Sie mischen zwei Konzepte mit falscher Syntax.

Die Knoten <assembly... /> und <namespace ... /> stellen eine Assemblierungs- und Namespace-Suchreihenfolge bereit, wenn der Knoten <register ... /> einen Typ enthält, der nicht selbst gefunden werden kann. Wenn ein Typ nicht gefunden werden kann, durchsucht er alle Kombinationen von [namespace].Type, [assembly] . Hier ist der Fehler: Es sucht nicht nach Type, [assembly] . Wenn irgendwelche <namespace ... /> Knoten definiert sind, versucht es NICHT, nur die Assembly anzuhängen.

Ihr <register type="Biblioteca.Contracts.IManterCategoriaBO" mapTo="Biblioteca.Business.ManterCategoriaBO" /> -Knoten hat also den Typ Biblioteca.Contracts.IManterCategoriaBO , der die Assembly nicht enthält und daher nicht gefunden werden kann. Daher muss eine Suche durchgeführt werden. Sie haben <namespace ... /> nodes angegeben, also versucht es zuerst Biblioteca.Biblioteca.Contracts.IManterCategoriaBO, Biblioteca . Beachten Sie den doppelten Biblioteca-Namen.

Hier ist eine korrigierte Konfigurationsdatei.

%Vor%     
TylerOhlsen 07.09.2013 08:14
quelle
4

Eine kleine Information, die niemand sagt, ist, dass ich auf alle Projekte verweisen muss, die von der Einheit benutzt werden.

Also, in meiner Lösung, in meinem Biblioteca-Web-Projekt, war es notwendig, auf Biblioteca.Business und Biblioteca.Contracts zu verweisen, um das Einheitsregister ohne Fehler passieren zu können. Ich habe nur die letzte referenziert.

Es ist unglaublich, aber das war mein Problem !!! Ich dachte, dass die Einheit eine Art Reflexion über alle Pfade in meiner unity.config-Datei ermöglicht. Aber ich habe mich getäuscht. Damit Unity funktioniert, müssen alle Projekte referenziert werden, die sich in der Datei unity.config befinden. Wenn ich auf einen Namespace zeige, muss das zugehörige Projekt referenziert werden.

Ich habe das Problem bereits gelöst, aber ich stimme diesem Ansatz nicht zu, damit die Einheit funktioniert. Aber sowieso, es funktioniert jetzt !!!

Danke Tyler, für Ihre Unterstützung.

    
Olivertech 10.09.2013 15:20
quelle
2

Wie im vorherigen Kommentar angegeben, können Sie die Reflektionsgruppe selbst laden, bevor Sie UnityContainer.LoadConfiguration(...) aufrufen. Hier ist ein allgemeiner Weg dazu.

Achte nur darauf, dass deine Assemblies mit ihrem Namen gefunden werden können. Dies kann getan werden, indem Sie die Assembly in das Bin-Verzeichnis Ihrer Anwendung platzieren. Oder fügen Sie einen <probing> Pfad zu Ihrer App-Konfiguration hinzu. Oder fügen Sie sie dem Global Assembly Cache (GAC) hinzu, aber ich empfehle das nicht.

%Vor%     
TylerOhlsen 19.09.2013 02:46
quelle
1

Ich habe diese Fehlermeldung ebenfalls erhalten, aber eine andere Ursache gefunden:

  1. Ich verwende ein WiX-Installationsprogramm, das einige der DLLs, die für die Zielbaugruppe erforderlich sind, nicht ordnungsgemäß implementiert hat (in diesem Beispiel wären es Abhängigkeiten von Biblioteca.Business). Also überprüfe das.
  2. Ich bekam dann die Fehlermeldung nur, wenn ich im Freigabemodus lief, der Debug-Modus war in Ordnung. Stellt sich heraus, dass die Ziel-mapTo-Klasse nicht mit dem Attribut "public" markiert wurde. Aus irgendeinem Grund spielte dies im Debug-Modus keine Rolle, ist aber im Freigabemodus ein Blocker.

Ich hoffe, dass das jemandem hilft, da es mich zwei Tage lang blockiert hat.

    
rusty 29.11.2016 20:39
quelle
0

Ich verbringe gerade einen guten Teil meines Tages damit, diesen Fehler zu beheben.

In meinem Fall gab es keinen Fehler in der Konfiguration, aber es stellte sich heraus, dass eine der Baugruppen, die die konkreten Typen enthielten, von einer anderen Baugruppe abhängig war, die sie nicht finden konnte.

Leider hat Unity keine Probleme beim Laden der Assembly angegeben. Tatsächlich wurde die Assembly im Modulfenster des Visual Studio-Debuggers angezeigt. Trotzdem konnte der Typ nicht geladen werden.

    
MvdD 03.06.2015 21:57
quelle
0

Wenn du von Google kommst, ist es am einfachsten, das <alias> und <namespace> Zeug zu entfernen und folgendes zu tun:

%Vor%

... Dabei ist MyApp Ihr Assemblyname aus den Projekteigenschaften - & gt; Anwendung.

    
Chad Hedgcock 23.05.2016 15:31
quelle