1

J'utilise un conteneur IoC (Castle Windsor) pour instancier des classes en fonction du fichier de configuration. Si je veux ajouter des classes à partir d'une nouvelle DLL qui n'existait pas lorsque j'ai compilé le projet, il y a un moyen de le faire sans recompilation?Est-il possible d'ajouter des références sans recompiler dans .NET?

Edit: Comme ce projet est un hôte de service pour le service WCF, et les classes que je veux inclure après la compilation sont services WCF Je voudrais aussi savoir si je peux inclure des informations point final sur les nouveaux services sans recompilation.

+0

@serhio - c'est sûrement une mauvaise idée? Vous n'avez pas utilisé Castle lui-même, mais comment un IoC ne peut-il pas supporter le chargement dynamique d'assemblages basés sur un fichier de configuration? –

+0

être franc, je ne sais pas – serhio

+0

oui, cela devrait fonctionner. –

Répondre

6

Je ne sais pas Windsor en particulier, mais je pense qu'il est possible - il suffit de spécifier le nom complet du type comprenant le nom de montage:

<component id="foo" 
      service="Namespace.IInterfaceName, InterfaceAssembly" 
      type="Namespace.ImplementationName, ImplementationAssembly" /> 
+0

Et qu'en est-il de la WCF? Puis-je inclure un service dans la configuration du point de terminaison sans recompilation? –

+0

@Jader: Je ne connais pas assez la WCF pour le dire, j'ai peur. Mais encore une fois, si vous spécifiez déjà un type, y compris l'assemblage, alors je m'attendrais à ce que ça marche. –

+0

Je viens de tester et cela fonctionne (WCF et Castle Windsor). –

1

Oui - c'est exactement ce que le château de Windsor est pour. J'utilise Castle dans un projet à la maison et je l'utilise pour charger dynamiquement des classes à partir d'assemblages qui n'existaient probablement pas lorsque j'ai créé la classe.

L'astuce est que les classes que vous chargez doivent implémenter une interface connue de votre application. Le but de cette opération est de pouvoir activer et désactiver différentes fonctionnalités selon les besoins. Votre projet utilise ISaveMyData pour enregistrer des éléments et utilise Castle Windsor pour utiliser Oracle ou MySql selon ce qui est peut-être installé sur le site client.

Comme pour WCF, les composants WCF doivent déjà spécifier une interface qu'ils utilisent (leur contrat). Dans la configuration normale pour les composants WCF, vous pouvez modifier l'adresse de point de terminaison et d'autres informations pour pointer vers différents composants chaque fois que vous en avez besoin, du moment qu'ils utilisent le même contrat. Aucun château Windsor n'est nécessaire pour cela. Aucune recompilation n'est nécessaire non plus - faites simplement changer la configuration et partez.

+0

Mais si je veux que la même application modifie l'interface du service hébergé sans recompiler, j'ai besoin du conteneur IoC. –

+0

Attendez - vous dites que vous voulez basculer un composant WCF avec un autre qui utilise une interface différente entièrement? –

+0

J'ai construit un hôte de service qui peut héberger n'importe quel service, n'importe quelle interface. C'est pourquoi je voulais faire exactement ce que vous avez décrit. –

Questions connexes