2014-09-18 3 views
0

Je travaille actuellement avec un grand nombre de liaisons qui sont en cours d'installation dans une solution API Web ASP.NET et pour la plupart WhenInjectedInto est utilisé avec Ninject. Pour appliquer mon aspect de l'exploitation forestière, je dois ajouter à chaque fixationApplication de l'intercepteur ninject à plusieurs liaisons

.Intercept().With<LoggingAspect>(); par exemple

Bind<IMyServiceClass>().To<MyService>() 
.WhenInjectedInto<SomeOtherClass>() 
.Intercept().With<LoggingAspect>();; 

qui est un peu fastidieux, surtout quand je veux passer d'interception et non interception et j'ai plus de 100 liaisons comme ça.

Existe-t-il un moyen de lier l'intercepteur de type loggingaspect à toutes les liaisons contenues dans ninject?

ou peut-être que je devrais appliquer l'intercepteur à tout et juste avoir l'intercepteur faire une vérification et exécuter le code d'interception ou pas?

+0

que diriez-vous de créer les liaisons par convention? De cette façon, vous n'auriez qu'à adapter la convention. Comment savez-vous actuellement si le type doit être intercepté ou non? – BatteryBackupUnit

+0

Je veux tout intercepter afin que je chronomètre les appels de méthode pour trouver les appels en cours d'exécution lente et aussi quels paramètres ont été utilisés à ce moment. Tout fonctionne bien, mais j'essaie de trouver une façon plus simple de le faire. La convention serait acceptable, mais la façon dont l'API a été conçue signifie qu'elle utilise .WhenInjectedInto partout, ce qui rend difficile l'utilisation de la convention –

Répondre

1

un moment que je me suis occupé Ninject, mais il est possible de Intercepter au niveau du noyau:

kernel.Intercept(context => true).With<LoggerInterceptor>();

Cela s'appliquera à tous les services enregistrés dans le noyau. Vous devrez installer Ninject.Extensions.Interception.DynamicProxy ou Ninject.Extensions.Interception.Linfu à partir de NuGet.

+0

Merci pour cela, je l'ai essayé mais je continue à me plaindre d'une classe scellée: Impossible de charger le type ' Castle.Proxies.Func'1Proxy 'de l'assembly' DynamicProxyGenAssembly2, Version = 0.0.0.0, Culture = neutre, PublicKeyToken = a621a9e7e5c32e69 'car le type parent est scellé. –

+0

vous ne serez pas en mesure d'intercepter sur cette classe, peu importe ce que vous allez faire. Donc, soit l'exclure (adaptez la partie '.Intercept (context => true)' selon vos besoins), soit détruisez la classe ... – BatteryBackupUnit

Questions connexes