Question

Je relisais Injection par main et Ninjection (ainsi que Pourquoi utiliser Ninject). Je rencontrai deux morceaux de confusion:

  1. La inject par la technique de la main, je suis déjà au courant, mais je ne suis pas familier avec Ninjection, et donc ne sais pas comment fonctionnerait le programme complet. Peut-être que cela aiderait à fournir un programme complet plutôt que, comme cela se fait sur cette page, montrant un programme divisé en morceaux

  2. Je ne comprends toujours pas vraiment comment cela rend les choses plus faciles. Je pense que je manque quelque chose d'important. Je sorte de voir comment un cadre d'injection serait utile si vous créez un groupe d'injections, puis la commutation entre les deux grands groupes tout à la fois (ce qui est utile pour se moquant, entre autres), mais je pense qu'il ya plus à ce que ça. Mais je ne suis pas sûr de ce que. Ou peut-être je juste besoin d'autres exemples de pourquoi cela est excitant de conduire à la maison le point.

Était-ce utile?

La solution

Lors de l'injection de vos dépendances sans un cadre de DI vous vous retrouvez avec le code de flèche partout dans votre application dire des classes comment construire leurs dépendances.

    public Contact()
        : this(new DataGateWay())
    {
    }

Mais si vous utilisez quelque chose comme Ninject, tout le code de flèche est dans un endroit qui rend plus facile de changer une dépendance pour toutes les classes de l'utiliser.

internal class ProductionModule : StandardModule
{
    public override void Load()
    {
        Bind<IDataGateway>().To<DataGateWay>();
    }
}

Autres conseils

  
    

Je ne comprends toujours pas vraiment comment cela rend les choses plus faciles. Je pense que je manque quelque chose d'important.

  

Ne serait-ce serait génial si nous ne devions développer des composants discrets où chaque fonctionnalité distincte nous pourvus pourrait facilement comprendre, la réutilisation et à entretenir. Où nous que a travaillé sur des composants.

Ce qui nous empêche de le faire, nous avons besoin est une infrastructure qui peut combiner une certaine façon et gérer ces composants dans une application de travail automatiquement . Infrastructure qui fait cela est disponible pour nous -. Un cadre du CIO

Ainsi, un cadre du CIO n'est pas à propos gestion des dépendances ou des tests ou la configuration. Au lieu de cela, il est à propos gérer la complexité, en vous permettant de ne travailler et de réfléchir sur les composants.

Il vous permet de tester facilement votre code en se moquant des interfaces dont vous avez besoin pour un bloc de code particulier. Il vous permet également d'échanger facilement des fonctionnalités sans casser d'autres parties du code.

Il est tout au sujet de la cohésion et le couplage.

Vous ne verrez probablement pas l'avantage sur les petits projets, mais une fois que vous avez passé petit, il devient vraiment apparent lorsque vous devez apporter des modifications au système. Il est un jeu d'enfant lorsque vous avez utilisé DI.

Je aime vraiment l'aspect autowiring de certains cadres ... quand vous n'avez pas se soucier de ce que vos types doivent être instancié.

EDIT: J'ai lu cet article par Ayende @ Rahien . Et je soutiens vraiment son point.

injection de dépendances en utilisant la plupart des cadres peut être configuré à l'exécution, sans avoir besoin d'une recompilation.

L'injection de dépendance peut être vraiment intéressant si vous obtenez votre code au point où il y a très peu de dépendances dans le code du tout. Certains cadres d'injection de dépendance vous permettra de définir vos dépendances dans un fichier de configuration. Cela peut être très utile si vous avez besoin d'un morceau vraiment flexible de logiciel qui doit être changé sans modifier le code. Par exemple, le logiciel de workflow est un candidat de choix pour ce type de solution.

L'injection de dépendance est essentielle pour le composante Driven Development . Ce dernier permet de construire vraiment complexes applications d'une manière beaucoup plus efficace et fiable.

En outre, il permet de séparer les préoccupations transversales communes proprement de l'autre code (il en résulte une base de code plus réutilisable et flexible).

Liens connexes:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top