2010-02-10 1 views
2

Comment puis-je dire à Castle de prendre une implémentation d'interface à partir des assemblages dans le répertoire d'exécution.
E.g.Castle Windsor: Trouver un assembly d'implémentation et l'utiliser

Comment puis-je dire à Castle de trouver une implémentation pour ILog, puis si je lâche log4net parmi les assemblys dans le répertoire d'exécution, il devrait le choisir et l'utiliser. Demain, si je décide de changer log4net en Nlog, il devrait ramasser Nlog à log (les deux devraient évidemment implémenter ILog)

Répondre

3

Vous ne devriez généralement pas être si implicite. Que faire si plus d'un impl est fourni? Que faire si vous laissez tomber accidentellement quelque chose que vous n'aviez pas prévu? Cela dit, vous devriez utiliser un fichier de configuration pour indiquer explicitement à Windsor en XML quel type remplit votre service, ou utiliser Binsor si vous voulez plus de flexibilité. Il n'y a pas de méthode magique dans le code "pour ce service, choisissez n'importe quelle implémentation dans n'importe quel assemblage dans ce dossier" et il est très improbable qu'il y en ait jamais.

Et pour le scénario spécifique des enregistreurs, vous pouvez utiliser la fonction d'enregistrement de Windsor.

+0

corrigez-moi, n'est-ce pas un concept populaire dans le monde de Java? –

+1

Je ne suis pas familier avec ce qui se passe en Java. En .NET si vous voulez travailler de cette façon, peut-être MEF est une meilleure option pour vous que le conteneur IoC (ou un hybride) –

+0

Pour moi, MEF est une bonne option, mais je n'aime pas être obligé de déclarer "exportations". – fredlegrain

Questions connexes