2010-10-25 6 views
0

J'ai une interfaceAjouter usine de soutien pour une inscription Windsor Dynamiquement

public interface IResolver<T> 
{ 
    T Resolve(); 
} 

Je sais que ce n'est pas l'idéal (localisateur de services est un anti-modèle et tous), mais dans certains cas, il est encore nécessaire (par exemple l'activation du service WCF - Je ne veux pas instancier le canal tant que Resolve() n'est pas appelé explicitement ... et dans le cas de BasicHTTP, le canal peut avoir besoin d'être Resolve() plusieurs fois, car le canal est fermé après chaque appel d'opération). Et avoir une usine injectée beats ayant le conteneur lui-même injecté dans un constructeur, non?

Je souhaite que toute classe qui hérite d'IResolver soit enregistrée automatiquement en tant qu'usine lorsqu'elle est enregistrée dans le conteneur. C'est-à-dire, je veux appeler automatiquement AsFactory sur ComponentRegistration avant que l'enregistrement soit traité.

Comment pourrais-je accomplir cela?

Merci d'avance.

Répondre

1

Jetez un oeil à la Typed factory facility. Avec cela, vous pouvez juste avoir une dépendance sur Func<ISomeService> et Windsor remplira la fonction appropriée pour le résoudre automatiquement.

+0

Donc je n'ai pas besoin d'enregistrer quelque chose avec AsFactory pour que l'usine l'utilise? – Jeff

+0

En outre, la documentation indique que je ne devrais pas utiliser NoTrackingReleasePolicy avec la facilité et que je dois utiliser LifecycledComponentsReleasePolicy ... mais ce n'est vraiment pas possible, car j'ai besoin que mes autres composants transitoires soient libérés normalement (et non dans le récipient pour toujours). – Jeff

+0

Je vois maintenant (vérifié avec un WeakReference) que la dernière version de Windsor n'a plus le problème qu'elle tient sur les références des composants transitoires ...? – Jeff

0

Vous pouvez certainement le faire avec une installation personnalisée, bien qu'il puisse y avoir un meilleur moyen. Désolé, je n'ai pas le temps pour l'instant d'enquêter plus loin.

Questions connexes