2016-07-13 1 views
0

Un petit arrière-plan: J'ai commencé à incorporer FluentValidation dans une application AspnetCore où j'utilise SimpleInjector comme DI de mon choix. Selon les réSEAU docsEst-ce mal d'enregistrer un conteneur tiers avec IServiceCollection dans AspnetCore

« La méthode ConfigureServices retourne généralement vide, mais si sa signature est modifiée pour revenir IServiceProvider, un autre conteneur peut être configuré et retourné »

Tout cela est bien un joli jusqu'à ce que j'ai réalisé que j'avais besoin de configurer les services qui n'étaient pas à moi, ce qui explique pourquoi l'exemple utilise containerBuilder.Populate(services); j'imagine. La bonne chose à propos de FluentValidation est que je peux créer mon propre IValidatorFactory pour résoudre mes validateurs (d'où mon problème est venu parce que mes validateurs ont été enregistrés avec SimpleInjector, pas le conteneur par défaut qui pensait que je n'en avais pas). J'ai pensé que je pourrais contourner ce mal de tête en enregistrant container de SimpleInjector avec le IServiceCollection et l'injecter dans mon IValidatorFactory en tant que IServiceProvider au lieu de retourner le conteneur dans la méthode ConfigureServices. On dirait que tout fonctionne comme un hack, mais est-ce le chemin à parcourir? Existe-t-il d'autres moyens que le wiki aspnet docs?

références: https://github.com/JeremySkinner/FluentValidation/blob/master/src/FluentValidation.AspNetCore/ServiceProviderValidatorFactory.cs

https://docs.asp.net/en/latest/fundamentals/dependency-injection.html

Répondre

0

Il y a des incompatibilités fondamentales entre Simple et Injector l'abstraction ASP.NET de base (DI-à-dire des incompatibilités qui ne peuvent pas être résolus) et beaucoup problems in general avec l'abstraction Microsoft a proposé.

En raison de cette our official advice est à:

évitez d'utiliser un adaptateur fourni auto-développé ou 3ème partie pour l'abstraction .NET de base DI. Isolez l'enregistrement des composants d'application du framework et des composants tiers. Poursuivre une méthode de travail SOLID et permettre à vos demandes d'inscription d'être vérifiées et diagnostiquées par Simple Injector, sans se soucier des incompatibilités avec le cadre et les composants tiers.

Vous pouvez lire en détail comment here vous devez travailler avec ASP.NET de base en matière d'utilisation d'un conteneur 3ème partie.

+0

C'est décevant que vous adoptiez une position politique plutôt que technique sur la question. Vous avez toujours créé un logiciel opiniâtre, mais vous nous avez toujours donné les outils pour faire les choses populaires que vous n'approuvez pas. Cela semble s'écarter de cette façon de faire traditionnelle et franchement très décevante. –

+0

merci. J'ai lu cet article l'autre jour quand j'ai introduit 'SimpleInjector' dans mon projet et créé des adaptateurs pour mon code si nécessaire. Je suppose que j'ai raté la 3ème partie! –

+0

@ErikFunkenbusch Veuillez prendre le temps de vous informer en lisant les articles a référencés de près et les ressources qui sont liées à ces articles. Après cela, vous vous rendrez compte que ce n'est pas une position politique, mais en fait une position technique. Simple Injector ne peut pas se conformer pour des raisons techniques au monde du conteneur Comforming comme Microsoft le propose. – Steven