2009-04-08 6 views
3

J'essaye de faire du AOP sur des objets au moment de la construction, et j'ai trouvé IConstructorInterceptor, ce qui serait parfait pour ce que je veux mais doesn't appear to work (dans la version 1.2 au moins).Spring.NET & Constructor Interceptors

J'ai aussi examiné à la fois IObjectPostProcessor & le IInstantiationAwareObjectPostProcessor, mais je ne peux pas trouver un moyen de faire du traitement sur un objet autour du temps de construction ... La méthode PostProcessPropertyValues ​​sur la IInstantiationAwareObjectPostProcessor est proche, mais il passe seulement par l'intermédiaire de setter injecté propriétés pas les valeurs arg constructeur ...

Spécifiquement ce que je veux est une référence à un objet juste après l'instanciation et en même temps, des références aux objets qui ont été injectés dans le constructeur. Y a-t-il un moyen de le faire, ou est-ce que mon meilleur pari pour juste passer à l'injection de setter & utiliser le post-processeur ou un MethodInterceptor?

+0

Avez-vous déjà eu ce travail? – DevelopingChris

+1

Non. Malheureusement, la fonctionnalité n'est tout simplement pas dans la version actuelle (ni dans le 1.3 à venir), et je n'ai jamais trouvé un meilleur travail que ce que j'ai mentionné ci-dessus. – Alconja

+0

associés: http://stackoverflow.com/questions/4106701/inheritancebasedaopconfigurer-using-runtime-constructor-arguments – Marijn

Répondre

0

AOP propose l'interception d'appel, pas l'injection de dépendance. En utilisant Spring.Net, vous pouvez utiliser des seters ou des constructeurs pour effectuer n'importe quelle injection de dépendance. Pour votre message et vos commentaires, il est supposé fonctionner. Sur le pipeline d'initialisation Spring.Net, analysez d'abord la courbe de dépendance, effectuez n'importe quelle création d'objet et définissez toutes les dépendances. Après cela, si votre classe implémente "Spring.Objects.Factory.IInitializingObject", la méthode "void AfterPropertiesSet();" est appelé. Une autre façon d'effectuer cela consiste à utiliser la configuration de votre objet, vous pouvez définir init-method sur le noeud d'objet. Ce comportement est basé sur les concepts IoC/DI.

Vous avez peut-être besoin de créer un objet d'usine spécifique. Pour ce faire, votre usine doit implémenter l'interface Spring.Objects.Factory.IFactoryObject. Cela aide le conteneur à déléguer pour vous la création de l'objet (les propriétés et les constructeurs de cette configuration sont pour votre usine).

Meilleures salutations