2017-06-15 4 views
0

les gens, j'apprends le noyau Asp.net. J'ai fait face à un choix que comment créer une instance de type de service. Il y a un code que je l'habitude d'écrire tout en utilisant WCF:Les raisons de créer une instance en utilisant l'injection de dépendance plutôt que manuellement dans le noyau asp.net

public class SomeService:ISomeService 
{ 
    [WebInvoke(UriTemplate="action1")] 
    public void DoSomething1() => new DBAccessBroker1().DoSomethingWithDB(); 

    [WebInvoke(UriTemplate="action2")]   
    public void DoSomething2() => new DBAccessBroker2().DoSomethingWithDB(); 
} 

Dans le code ci-dessus, je crée l'instance de DBAccessBroker tout en créant par exemple un service SOMESERVICE. Maintenant, dans le Asp.net de base, le même fonctionalité peut être mis en œuvre en utilisant l'injection de dépendances comme ceci:

public class Startup 
{ 
    ... 
    public void ConfigureServices(IServiceCollection services) 
    { 
     services.AddSingleton<DBAccessBroker1>(); 
     services.AddSingleton<DBAccessBroker2>(); 
     ... 
    } 
    ... 
} 
public class SomeController : Controller 
{ 
    DBAccessBroker1 broker1=null; 
    DBAccessBroker2 broker2=null; 
    public SimeController(DBAccessBroker1 broker1,DBAccessBroker2 broker2) 
    { 
     this.broker1=broker1; 
     this.broker2=broker2; 
    } 

    [HttpPost("action1")] 
    public void DoSomething1()=>broker1.DoSomethingWithDB(); 

    [HttpPost("action2")] 
    public void DoSomething2()=>broker2.DoSomethingWithDB(); 
} 

De toute évidence, il est plus succinct de créer une instance manuellement que l'utilisation de DI parce qu'il n'y a pas besoin d'enregistrer un service DI et écrire un constructeur de contrôleur impair avec des paramètres comme si venant de l'air. D'autre part, je crois qu'il doit y avoir des avantages à laisser Microsoft intégrer DI dans Asp.Net Core. Je suppose que DI devrait être mis en œuvre avec des fonctionnalités comme le cache ou le type de mécanisme réutilisable. Mais j'ai échoué à trouver des documents pour le confirmer. Donc je me demandais si certains hommes à l'intérieur ou des gens avec une compréhension plus profonde pouvaient me dire le principe sous-jacent de DI. Je dois être convaincu de créer une instance de mon type de service en utilisant DI plutôt que manuellement dans mon cas.

+0

Copie possible de [Qu'est-ce que l'injection de dépendance?] (Https://stackoverflow.com/questions/130794/what-is-dependency-injection) – NightOwl888

Répondre

2

Utiliser DI ont au moins deux pros dans votre cas:

1) Vous ne devriez pas prendre soin sur les paramètres que vous devez passer à constroctors courtier. Vous recevrez des instances prêtes à l'emploi, alors que la logique de création se trouve à un autre endroit (Startup.cs ou fabrique personnalisée). 2) DI peut vous donner la même instance de courtier au contrôleur et à d'autres services pendant le traitement d'une même requête utilisateur, et donner une autre instance à plusieurs classes traitant une autre requête (même simultanément) - si vous les enregistrez avec Scope.

Si vous n'avez pas besoin de ces "caractéristiques" - vous pouvez créer des courtiers "manuellement".