A minta a függőség injekció és a bevezetése ninject - di kerete

A cikk egy példát mutat szorosan kapcsolódó osztályok tartott számukra végrehajtásának újratervezés minta Függőség Injection (függőség injekció), és megmutatja, hogyan kell használni Ninject keretet, amely megkönnyíti a bevezetését függőség.







Mindannyian kód írása, mint ez legalább egyszer az életben. És azok, akiknek az a feladata, hogy ellenőrizze a kódot fejlesztők, akik láthatják, hogy elég gyakran. A szintaktikai és logikai szempontból semmi nem bűnöző. A kód jól működik ezzel mindent az várható volt, és egyáltalán semmi mást hozzányúlni, ha ez része a program öt osztályba. Kérdések merülnek fel, amikor egy ilyen kód jelenik meg a valódi projekt, több tucat osztályok, amely hosszú életciklus és nagy a valószínűsége a változó felhasználói igényeket, az adatok tárolási módszer vagy támogatott hardver.

Mi ez rossz? Röviden, a függőség egy adott osztály egy adott osztályban Autó Motor. Képzeljük el, hogy az osztály konstruktora Engine változás - ebben az esetben meg kell változtatni, és az autó. Vagy például, kap egy-egy motor. És mi lenne a gép képes volt használni újra, hogy meg kell változtatni az osztályban Autó. Ezen kívül egy ilyen mereven programozott függőség csökkenti tesztelhetőségi osztályok - Autó osztály nem lehet tesztelni elkülönítve Engine vagy cserélje Engine rossz tárgyat szimulálni előre nem látható körülmények.

Mit lehet tenni, hogy javítsa a kódot? Az első -, hogy adja meg IEngine felület, hogy lesz végre az osztály Engine.

Ezután módosítsa a Car osztály, ami helyett Engine osztály szokott IEngine felület. És a második, nem kevésbé fontos változás - Autó osztály nem okozhat maga a motor, most a tervező kap egy hivatkozás egy tárgy, amely megvalósítja az interfészt IEngine.

És az utolsó dolog, amit meg kell tennie -, hogy változtassa meg a Fő funkció.

Az ezt követő döntést könnyebb bővíthető, több tesztet és egy példa a végrehajtás a minta Függőség Injection (Függőség Injection) - gépfüggő motor beállítva, hogy ne az osztályban, és a motor kívül jön létre az osztály, beágyazva.







A hátránya ennek a megoldásnak - elvesztette az egyszerűség létre egy új példányt a Car osztályban. Képzeld el, ha egy program sok ilyen függőségek, mindegyik kell majd kézzel kell létrehozni, újra és újra. Ezért megy előre, és hogyan tudjuk az élet könnyebb segítségével Ninject, amely keretet biztosít automatikus függőség injekció.

Az alapötlet egy DI keretrendszer objektumok létrehozásához lehet leírni, mint ez: „Szükségem van egy objektum osztály A, tette, és nem érdekel, hogy hogyan és mit fog tenni, hogy”. Itt van, hogyan lehet létrehozni egy gép nézne segítségével Ninject:

Mi ninjectKernel világossá válik később, de most figyelni a hiányát említik, vagy IEngine Engine. Due Ninject tulajdonságainak előzetes tudja, hogy az autó igényli a motort, és amikor ő kérte, hogy hozzon létre egy új példányt a Car, egyedül ő teremt Motor és elküldi a Car kivitelező. Így minden, ami szükséges - ez egy osztály a lekérdezések. Minden függőség szükséges annak létrehozását és működését, a DI keret fogja megoldani a saját. Természetesen, ha ez korábban beállítva.

Ninject egyaránt lehet tölteni az oldalról Ninject.org stabil verzió, vagy tegyen formájában tényleges forrása fájlokat a tárolóból. Azt javasoljuk, hogy használja a második módszert, hiszen a verzió a tárolóban, támogat számos új funkciót, beleértve a kódot, amely az ASP.NET MVC.

A kezdéshez az Ninject, a projekt szükséges összekapcsolni Ninject.Core.dll szerelvény, amely megvalósítja az alapvető jellemzői a keret. A második lépés - konfigurálása. Sajnos Függőség Injection - ez nem varázslat, és amely Ninject tudja, hogyan kell feloldani a függőségeket, akkor meg kell tanítani. Mert mi program, akkor csak két utasítást:

Bár sok DI keretek támaszkodik XML konfigurációs fájlok, Ninject egy egyszerű, intuitív API feladat függőségeket az ismerős szintaxist és lehetővé teszi, hogy az összes IDE jellemzői.

Az első utasítás összeköti IEngine interfész osztály Engine hogy valahányszor Ninject érzékeli, hogy az objektum típusa IEngine, a motor objektum jön létre. A második állítás írja le a kívánt viselkedés, amikor felkérték, hogy hozzon létre egy példánya a Car - létre kell hozni egy példánya ez, ez egyszerű. Tény, hogy a második utasítás nem szükséges - ez a viselkedés valósul alapértelmezés keretet. Ha szükséges autowire osztályok lehetnek be és ki, és állítsa be mindent magad.

Most az a kérdés merül fel - hol elvégzésére konfigurációt? Konfigurációt a virtuális módszer Load osztályt, amely megvalósítja az interfészt IModule. A legegyszerűbb módja az lenne, hogy örökölni egy osztályt StandardModule osztályban.

Ha szükséges, akkor több ilyen modulok, például külön konfigurációk különböző részein a program. Továbbá, ezek a modulok létrehozásához használt tartály, amely mindent megtesz a piszkos munkát nekünk.