Motif décorateur multiple dans le château-windsor

Nous sums en train de remodeler certains logiciels existants pour qu’ils soient plus testables et avons choisi Dependency-Injection et Castle.Windsor pour nous aider.

Premièrement, notre objective: * Un certain nombre de décorateurs travaillant tous sur un stream de données. * Plusieurs combinaisons de décorateurs sont possibles et les nœuds racine dans chaque cas peuvent être nécessaires pour obtenir des données à partir de différents endroits.

Techniquement, notre conception est la suivante:

interface IUpdateableValue { T Get(); }; 

Nous avons par exemple trois ensembles de données à récupérer avec un certain nombre de composants, tous implémentant IUpdateableValue () (pseudo-code):

 JsonParser( Decompressor( Decrypter(decryptionKey FileCache(filename, HttpWebDownloader(url)))) XmlParser( Decompressor( Decrypter(decryptionKey2 FileCache(filename2, HttpWebDownloader(url2)))) 

Je ne parviens pas à concevoir un système compatible avec un framework DI tel que Castle-Windsor. Je soupçonne qu’une partie pourrait être gérée par des instances nommées, mais cela semble malodorant pour cet usage.

L’idée est que “l’utilisateur” des instances JsonParser et XmlParser, par exemple, ne sait pas (ou se moque) du fait que les données proviennent d’un HttpUrl, d’un fichier ou d’une magie.

Je pense qu’il y a quelque chose qui ne va pas dans notre conception, mais je ne sais pas comment le réparer.

Des idées sur la façon de progresser?

Avec Castle Windsor, vous pouvez implicitement configurer les décorateurs en les enregistrant dans le bon ordre. Vous devez d’abord enregistrer le décorateur extérieur:

 container.Register(Component .For() .ImplementedBy()); container.Register(Component .For() .ImplementedBy()); container.Register(Component .For() .ImplementedBy()); ... 

Lorsque vous résolvez IUpdateableValue, Caste Windsor connectera automatiquement les dépendances afin qu’elles soient nestedes correctement.