2009-09-17 10 views
2

J'utilise un conteneur Unity DI. Dans le fichier de configuration du type je précise comme:Unity Container Config question

<type type="Interfaces.ILogger,Interfaces" 
mapTo = "ConcreateClasses.ConsoleLogger,ConcreateClasses" /> 

Ma compréhension est que le dll Interfaces et dll ConcreteClasses devraient être référencés dans mon projet pour que cela fonctionne. Mais ce que je veux faire est de ne pas référencer les classes d'implémentation concrètes au moment du design. Je voudrais qu'ils soient chargés à l'exécution en spécifiant le chemin de la DLL ConcreteClasses.

Existe-t-il un moyen de le faire?

Merci

Répondre

1

Vous pouvez le faire par la réflexion:

Assembly a = Assembly.LoadFrom("pathToDll"); 
Type interfaceType = typeof(Interfaces.ILogger); 
Type implementingType = a.GetTypes.Where(t => t.IsAssignableTo(interfaceType)).First(); //add any other constraints to decide mapping 

container.RegisterType(interfaceType, implementingType); 
+0

Merci pour la réponse. Donc, n'y a-t-il aucun moyen de le faire via le fichier de configuration? – rauts

3

Vous n'avez pas besoin de faire référence à l'ensemble de mise en œuvre concrète dans votre projet, il vous suffit de l'avoir dans le même dossier que votre fichier de configuration, ou disponible à partir du GAC. Il est COMMODABLE pour référencer l'autre assembly avec l'implémentation concrète, afin que Visual Studio place une copie de la DLL dans le dossier BIN résultant de votre projet, rendant ainsi la recherche triviale.

+0

Je suis désolé mais l'assembly d'implémentation concret est soit de référence, soit dans GAC. Le placer dans le même dossier que le fichier de configuration n'aide pas. En tout cas merci pour la réponse – rauts

+0

J'ai une assez grande implémentation assise sur le EC2 en ce moment qui n'a AUCUNE référence à des objets concrets, et tous mes objets sont référencés par type dans une section de configuration Unity. Je ne sais pas quels problèmes vous avez, mais cette configuration fonctionne bien pour moi. –

+0

C'est intéressant. Est-ce que vous déployez tout le fichier de configuration et Dll dans le même dossier parce que c'est ce que je fais en ce moment et son ne fonctionne pas. Pouvez-vous partager avec moi votre stratégie de déploiement? – rauts