0

Je suis nouveau ici et j'espère que ma première question ne déroutera personne. J'utilise Castle Windsor et Castle DynamicProxy ensemble, afin d'intégrer AOP avec IOC, afin que je puisse implémenter un service de journalisation (et audit, etc.) avec intercepter tous les services dans mon projet. J'essaye de proxy l'instance résolue pour obtenir ce fait mais sans chance. Parce que le proxy renvoyé aura les propriétés de l'instance résolue définie sur null. Voici les informations de débogage pour référence (la propriété PROBLEMATIC est TimeService).[Castle.DynamicProxy] L'objet proxy créé n'a pas les propriétés de l'objet original correctement défini

the resolved instance before proxied

L'instance résolue avant proxy.

the proxied object

L'objet mandaté

Ai-je raté quelque chose ou que j'ai compris le château DynamicProxy dans une mauvaise direction? J'ai cherché des solutions mais je n'ai pas eu de chance.

Les réponses sont très appréciées. Merci d'avance.

Répondre

1

Vous devez utiliser le support de Windsor intégré pour AOP lors de l'inscription, pas primordial WindsorContainer.Resolve sinon vous allez aussi lancer dans d'autres problèmes dans la libération des composants et des durées de vie conteneurs:

container.Register(
    Component.For<ICalcService>() 
     .Interceptors(InterceptorReference.ForType<ReturnDefaultInterceptor>()).Last, 
    Component.For<ReturnDefaultInterceptor>() 
); 

Voir la documentation pour plus d'informations: https://github.com/castleproject/Windsor/blob/master/docs/registering-interceptors-and-proxyoptions.md

+0

Merci beaucoup pour votre réponse, cela fonctionne pour moi.Une autre question, semble que cette solution nécessite une configuration d'intercepteur pour chaque composant (soit dans le code ou le fichier de configuration), est-il possible de spécifier une sorte de intercepteurs qui s'applique automatiquement à tous e composants? –

+0

@SkyFeng si vous n'utilisez pas l'enregistrement piloté par convention (par exemple, Classes.FromAssemblyContaining()), puis le conteneur hook. ComponentRegistered et ajoutez à ComponentModel.Interceptors. –

+0

J'ai compris. Merci beaucoup. @ jonathon-rossi –