Notre équipe a récemment eu beaucoup de mal à décider si c'est une bonne pratique pour les bibliothèques de classes .NET Core d'enregistrer leurs propres implémentations du fait de fournir une méthode d'extension IServiceCollection comme AddMyServices ().
Mon point était qu'il est bon de le faire parce que:
Les contre-arguments étaient les suivants:
Je voulais poser des questions aux développeurs .NET Core plus expérimentés sur leurs approches avec tous les pros, ce qui me manque peut-être. S'il y a des arguments solides pour utiliser la deuxième approche que je n'ai pas énumérée ici, j'aimerais vraiment en prendre connaissance.
PS. Cette question a été déplacée de StackOverflow car elle a été marquée comme davantage basée sur l'opinion. À mon avis, cela touche les principes fondamentaux de la programmation orientée objet, et la question n'est pas de savoir quelle majorité de développeurs choisit, mais de savoir pourquoi quelqu'un privilégie une approche par rapport à l'autre.
Merci, Radek
Les principaux documents ASP.Net le recommandent
Chaque service. Ajouter la méthode d'extension {SERVICE_NAME} ajoute (et configure éventuellement) des services. Par exemple, services.AddMvc () ajoute les services dont Razor Pages et MVC ont besoin. Nous avons recommandé que les applications suivent cette convention. Placez les méthodes d'extension dans l'espace de noms Microsoft.Extensions.DependencyInjection pour encapsuler des groupes d'inscriptions de service.
Mais non.
L'une des choses les plus ennuyeuses à propos de la configuration des plugins est d'essayer de deviner la méthode d'extension à utiliser pour les configurer. Ou je devrais dire, la version que vous en avez car le nom semble changer entre les versions et les frameworks
Deuxièmement, souvent ces méthodes d'enregistrement cumulées n'exposent pas toutes les choses que vous pourriez vouloir remplacer ou configurer sur les services sous-jacents. L'intérêt du gestionnaire de services est que vous puissiez remplacer les dépendances lorsque cela est nécessaire, mais la méthode d'extension qui le fait pour vous peut empêcher cela.
Mais peut-être plus important encore, je ne pense pas que cette convention ait encore pris racine. Il semble y avoir des philosophies concurrentes en ce qui concerne startup.cs et program.cs. Si vous ne soutenez qu'une seule méthode, vous allez être du mauvais côté de quelqu'un.
Je fournirais la méthode d'extension, mais dans un package optionnel séparé. Autorisez les utilisateurs à enregistrer manuellement les composants s'ils le souhaitent ou utilisez la méthode d'extension pour une configuration par défaut.