0
votes

ASP.NET Core 2.0 Durée de vie du service

J'ai une application API, application de la bibliothèque de classes de service et de référentiel. SERVICE PARTIE I Écrire une logique et un référentiel Business communiquer uniquement pour la base de données. Ma question que le type de dépendance est le meilleur pour le référentiel et le service. XXX


1 commentaires

S'il y a des choix, il doit dépendre, alors quel est le scénario?


3 Réponses :


0
votes

Les services de vie transitoires (addtransient) sont créés à chaque fois Ils sont demandés au conteneur de service. Cette vie fonctionne mieux Pour les services légers et apatrides.

SERVICES DE VIE SCOPED (ADDCOPED) sont créés une fois par client demande (connexion).

Singleton Lifetime Services (AddSingleton) est créé la première fois ils sont demandés (ou lorsque le démarrage.configurevices est exécuté et un L'instance est spécifiée avec l'enregistrement du service).

Dépendre donc de ce dont vous avez besoin que vous pouvez choisir une ascension correcte, vous pouvez le voir plus ici


0 commentaires

0
votes

Je suppose que votre CocherPositorititory dépend de votre CORE EF CORE dBContext et de votre Ef core dbcontext est par défaut enregistré comme scopedserivce est donc ici Enregistrement TICKEPository comme SingletOnervice < / code> est hors de considération comme parce que:

Il est dangereux de résoudre un service scopé d'un singleton. Il peut que le service ait un état incorrect lors du traitement des demandes suivantes.

Pour plus de détails: Injection de dépendance dans ASP.NET Core-Service Vietimes

Vous pouvez maintenant choisir entre addtransient <> et addScoped <> où:

Les services de vie transitoires (addtransient) sont créés à chaque fois qu'ils sont demandés au conteneur de service. Cette durée de vie fonctionne mieux pour les services légers et apatrides.

SERVICES DE VIE SCOPÉE ​​(ADDCOPED) est créé une fois par demande client (connexion).


0 commentaires

1
votes

Comme toujours, cela dépend. Ma suggestion est la suivante:

  • Scoped: À mon avis, il peut y avoir deux raisons principales de l'utiliser:
    • Votre dépendance a une dépendance qui a une durée de vie cachée. Dans ce cas, vous ne pouvez pas utiliser Singleton, mais peut utiliser Scoped ou Transient. Lequel vous devriez prendre est basé sur les autres critères.
    • Votre dépendance a un état qui le rend inapproprié à être utilisé dans la portée du singleton, mais il est suffisamment lourd que vous ne voulez pas l'enregistrer comme transitoire. Une autre possibilité est que, encore une fois, elle ne peut être utilisée à Singleton Scope, mais il convient de partager la même instance par demande (portée) et vous ne souhaitez pas ajouter les frais généraux de la construction de nouvelles si deux types dépendent de la même manière. chose et les deux sont utilisés pour servir une seule demande.
    • Transient: C'est l'approche la plus simple. Chaque fois qu'une instance d'une dépendance enregistrée de cette manière est requise, une nouvelle instance est créée. C'est probablement le plus infaillible, mais peut causer des frais généraux graves si son utilisation n'est pas justifiée. @Tony Ngo a souligné dans sa réponse, citant des documents officiels, que cela fonctionne mieux pour des objets légers et apatrides, mais je dirais que l'apatridie est un très bon indicateur que vous voudrez peut-être utiliser Singleton Lifetime comme l'apatridie garantit que le même objet peut être utilisé simultanément bien. Si vous choisissez une vie transitoire ou singleton dans ce cas dépend vraiment si vous vous souciez de tels aspects des performances telles que CO CPC, ce qui est évidemment beaucoup plus élevé si vous créez une nouvelle instance chaque fois qu'une telle dépendance est nécessaire, même si vous pouviez éviter Ce faisant. Cela dit, le transitoire est également utilisé par de nombreux développeurs de ce scénario, probablement dû à son inquiétude, ou simplement parce qu'ils ont tendance à y réfléchir comme choix par défaut.
    • Singleton: Les points ci-dessus résument essentiellement celui-ci: vous pouvez choisir cela quand il n'y a absolument aucune raison de créer une nouvelle instance de la dépendance pour chaque demande (portée) ou d'utiliser une autre instance dépendante. Notez que comme indiqué précédemment, vous ne pouvez pas utiliser Singleton Lifetime lorsque le type a une dépendance enregistrée en tant que scopée.

0 commentaires