Je travaille sur une implémentation de l'intercepteur de journal en utilisant Castle Dynamic Proxy et StructureMap, donc dans mon registre de dépendances je dis à StructureMap de décorer toute instance de TrafficSourceRepository avec un LoggingInterceptor.Génération de proxy dynamique uniquement pour les singletons?
var proxyGenerator = new ProxyGenerator();
For<ITrafficSourceRepository>(Lifecycles.Singleton)
.DecorateAllWith(instance => proxyGenerator
.CreateInterfaceProxyWithTargetInterface(instance,
new LoggingInterceptor(LogManager.GetLogger("AgencyPlayground"))))
.Use<TrafficSourceRepository>();
Tout semble bien, cela fonctionne, mais le TrafficSourceRepository sera instancié comme Singleton
, et je ne veux pas, donc je changer la durée de vie des TrafficSourceRepositories résolus comme Transient
:
var proxyGenerator = new ProxyGenerator();
For<ITrafficSourceRepository>(Lifecycles.Transient)
.DecorateAllWith(instance => proxyGenerator
.CreateInterfaceProxyWithTargetInterface(instance,
new LoggingInterceptor(LogManager.GetLogger("AgencyPlayground"))))
.Use<TrafficSourceRepository>();
et il ne fonctionne plus ... il est un bug ou que je fais quelque chose de mal?
En ne vous dire fonctionne pas LoggingInterceptor est pas appelé? – Evk
oui, si je change la durée de vie en transitoire, l'intercepteur n'intercepte pas – InferOn
En utilisant le code exact que vous avez posté je ne peux pas le reproduire: avec l'intercepteur transitoire lifecycle est toujours appelé. Alors peut-être que vous devriez fournir un exemple de travail minimal pour reproduire cela. – Evk