Un modo per aggiungere alcuni assembly predefiniti per risolvere i tipi da in Unity / ObjectBuilder?
-
03-07-2019 - |
Domanda
Sto lavorando al mio primo progetto utilizzando MS Unity IoC framework.
Se ho questo nella mia configurazione di unità:
<container name="TestBusiness">
<types>
<type type="PFServer.DataAccess.TestDataAccess" />
Quindi ottengo l'errore:
Impossibile caricare il tipo 'PFServer.DataAccess.TestDataAccess' dal montaggio 'Microsoft.Practices.Unity.Configuration, Versione = 1.1.0.0, Cultura = neutro, PublicKeyToken = 31bf3856ad364e35' .
Tuttavia, se aggiungo il nome dell'assembly alla definizione del tipo:
<container name="TestBusiness">
<types>
<type type="PFServer.DataAccess.TestDataAccess, PFServer" />
Quindi funziona benissimo. Esiste un modo per aggiungere un set predefinito di assiemi da cui caricare i tipi? La cosa strana in questo caso è che "PFServer.dll" è l'assembly che contiene comunque tutta questa configurazione. Trovo strano che l'assembly corrente non sia nel percorso per risolvere gli oggetti ... O sto solo facendo qualcosa di sbagliato?
Soluzione
Unity risolve le stringhe in oggetti Type chiamando il metodo statico Type.GetType (stringa) che prevede un argomento AssemblyQualifiedName . La chiamata a GetType viene effettuata nell'assembly Microsoft.Practices.Unity.Configuration che non è a conoscenza dell'assembly PFServer, quindi necessita del nome dell'assembly nella stringa.
Penso che gli alias di tipo potrebbero aiutarti. Ecco un esempio
<unity>
<typeAliases>
<typeAlias alias="TestDataAccess" type="PFServer.DataAccess.TestDataAccess, PFServer" />
...
</typeAliases>
<containers>
<container name="TestBusiness">
<types>
<type type="TestDataAccess" />
...