Unity kann die grundlegende Abhängigkeitskette nicht auflösen

8

Ich implementiere das dynamische Laden und Registrieren meiner Assemblys in Unity IoC.

Gegeben diese Klassen:

%Vor%

Und diese Konfiguration:

%Vor%

Der Code:

%Vor%

Wirft:

  

Eine erste Chance auf den Typ   'Microsoft.Practices.Unity.ResolutionFailedException' ist in aufgetreten   Microsoft.Practices.Unity.dll

     

Zusätzliche Information: Auflösung der Abhängigkeit fehlgeschlagen, type =   "MyAsm.IC", name="(keine)".

     

Ausnahme aufgetreten während: während der Auflösung.

     

Ausnahme ist: InvalidOperationException - Der Typ IC hat keine   zugänglicher Konstruktor.

     

Zum Zeitpunkt der Ausnahme war der Container:

     

MyAsm.IC, (keine)

Der gesamte obige Code wird in derselben Assembly MyAsm ausgeführt. Beim Analysieren des Containers im Debug-Modus listet die Registrations -Eigenschaft die scheinbar richtige Sammlung von Zuordnungen von A , B und C zu ihren jeweiligen Schnittstellen sowie zu sich selbst auf.

Irgendwelche Ideen?

LÖSUNG

Nach Tylers Antwort habe ich gewechselt:

%Vor%

bis

%Vor%

was das Problem gelöst hat. Diese beiden Methoden in Assembly haben dasselbe Argument und denselben Rückgabetyp, und variieren nur ein bisschen im Verhalten . Pures Übel .

    
Jacek Gorgoń 03.03.2014, 23:06
quelle

3 Antworten

5

Ich konnte den Fehler reproduzieren, den Sie bekommen.

Sie laden also die Assembly aus einer Datei Assembly.LoadFile(@"path\MyAsm.dll"); und lösen dann einen hart referenzierten Typ container.Resolve(typeof(IC)); auf. Ich glaube, dass diese Typen von zwei verschiedenen kompilierten Binärdateien kommen. Die Typen aus der Binärdatei in @ "Pfad \ MyAsm.dll" werden in den Container geladen, aber Sie versuchen, den Typ der Binärdatei aus dem Bin-Verzeichnis des Anwendungspfads aufzulösen (Die referenzierte Assembly CopyLocal ist auf True gesetzt).

Entweder müssen Sie die Typen aus der referenzierten Binärdatei registrieren, die bereits in der Anwendungsdomäne geladen ist, oder Sie müssen den Typ aus der geladenen Binärdatei mithilfe der Reflektion auflösen, um den Typ zu finden.

%Vor%

- oder -

%Vor%     
TylerOhlsen 04.03.2014, 04:54
quelle
1

Sie können das auch versuchen.

%Vor%

Deaktivieren Sie "Common Language Runtime Exceptions" und versuchen Sie es erneut.

    
S.E.T 05.02.2016 05:19
quelle
0

Wie ich es gelöst habe, indem ich die Schnittstelle und die Repositories auf unity.config

abgebildet habe %Vor%     
quelle