Webes alkalmazások fejlesztése 10. előadás. Szolgáltatás alapú rendszerek megvalósítása (ASP.NET WebAPI) Cserép Máté

Hasonló dokumentumok
Webes alkalmazások fejlesztése 10. előadás. Webszolgáltatások tesztelése (ASP.NET Core) Cserép Máté

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Integrációs mellékhatások és gyógymódok a felhőben. Géczy Viktor Üzletfejlesztési igazgató

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Webes alkalmazások fejlesztése 12. fejezet. Szolgáltatás alapú kommunikáció (WCF) Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Webes alkalmazások fejlesztése 6. előadás. Állapotfenntartás (ASP.NET Core) Cserép Máté

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET) Cserép Máté.

Webes alkalmazások fejlesztése 7. előadás. Autentikáció és autorizáció (ASP.NET)

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET)

Kivételkezelés, naplózás. Exception handling, logging

Webes alkalmazások fejlesztése 7. előadás. Autentikáció és autorizáció (ASP.NET Core) Cserép Máté

Eseményvezérelt alkalmazások fejlesztése I 11. előadás. Szoftverek tesztelése

A Java EE 5 plattform

OOP és UML Áttekintés

Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

JAVA webes alkalmazások

Image Processor BarCode Service. Felhasználói és üzemeltetői kézikönyv

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Grafikus keretrendszer komponensalapú webalkalmazások fejlesztéséhez

Models are not right or wrong; they are more or less useful.

Webes alkalmazások fejlesztése

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET Core) Cserép Máté

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Models are not right or wrong; they are more or less useful.

Bevezető. Servlet alapgondolatok

Programozási nyelvek Java

SZÁMÍTÓGÉPES ADATBÁZIS-KEZELÉS. A MySQL adatbáziskezelő PHP folytatás JDBC, ODBC

Unit Teszt. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Unit Teszt / 22

TELJESÍTÉNYMÉRÉS FELHŐ ALAPÚ KÖRNYEZETBEN AZURE CLOUD ANALÍZIS

OOP #14 (referencia-elv)

DCOM Áttekintés. Miskolci Egyetem Általános Informatikai Tanszék. Ficsor Lajos DCOM /1

Web-fejlesztés NGM_IN002_1

Webes alkalmazások fejlesztése Bevezetés. Célkitűzés, tematika, követelmények. A.NET Core keretrendszer

Webes alkalmazások fejlesztése 6. előadás. Állapotfenntartás (ASP.NET) Állapotfenntartás. Állapotfenntartás. Állapotfenntartás.

Webes alkalmazások fejlesztése Bevezetés. Célkitűzés, tematika, követelmények. A.NET Core keretrendszer

Java és web programozás

Java Programozás 11. Ea: MVC modell

Oracle Containers for Java - j2ee alkalmazás szerver funkciók. Molnár Balázs Oracle Hungary

NAV felé történő számla adatszolgáltatás a Nagy Utazás 3 programmal

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Eseményvezérelt alkalmazások fejlesztése II 4. előadás. Windows Forms alkalmazások architektúrája és tesztelése

Viczián István IP Systems JUM XIX szeptember 18.

Osztályok. 4. gyakorlat

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Szoftvertechnológia 8. előadás. Szoftverrendszerek tervezése. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Webes alkalmazások fejlesztése 1. előadás. Webes alkalmazások és biztonságuk

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés

Madarassy László, mérnök, BME - Mobil Innovációs Központ. lmadarassy@mik.bme.hu

Magyar Nemzeti Bank - Elektronikus Rendszer Hitelesített Adatok Fogadásához ERA. Elektronikus aláírás - felhasználói dokumentáció

BioAdmin 4.1 könnyű telepítés csak Kliens használatra

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Stateless Session Bean

Szoftvertechnolo gia gyakorlat


Miről lesz szó? Setup Project készítése. Tulajdonságok. 1. Készítsünk egy setup project alkalmazást egy már elkészített, lefordított programhoz.

API tervezése mobil környezetbe. gyakorlat

BME MOGI Gépészeti informatika 4.

Programozás I. 1. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

Segédanyag: Java alkalmazások gyakorlat

Mobil Partner telepítési és használati útmutató

Webes alkalmazások fejlesztése 2. előadás. Webfejlesztés MVC architektúrában (ASP.NET) Webfejlesztés MVC architektúrában Fejlesztés ASP.

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Osztályszintű elérés, kivételkezelés, fájlkezelés

Flash és PHP kommunikáció. Web Konferencia 2007 Ferencz Tamás Jasmin Media Group Kft

BaBér bérügyviteli rendszer telepítési segédlete év

Mobil Informatikai Rendszerek

Hálózati operációs rendszerek II.

Overview. Service. Application Activity Activity 2 Activity 3. Fragment. Fragment. Fragment. Frag ment. Fragment. Broadcast Receiver

Felhasználói leírás a DimNAV Server segédprogramhoz ( )

1/9. Sunell IP kamerák webes felületének használati útmutatója. Élő kép (Live Video)

Tájékoztató. Használható segédeszköz: -

BaBér. Bérügyviteli rendszer. Telepítési segédlet 2014.

XML Webszolgáltatás alapú osztott alkalmazás fejlesztése Johanyák Zsolt Csaba 1

Programozás II. ATM példa Dr. Iványi Péter

OCSP Stapling. Az SSL kapcsolatok sebességének növelése Apache, IIS és NginX szerverek esetén 1(10)

Alkalmazás technológiai frissítés migrációs és üzemeltetési tapasztalatok

Programozási technológia

Alkalmazott Modul III 6. gyakorlat. Objektumorientált programozás: öröklődés és polimorfizmus

Bánsághi Anna

Segesdi Dániel. OpenNebula. Virtualizációs technológiák és alkalmazásaik BMEVIMIAV ősz

Symfony kurzus 2014/2015 I. félév. Security: authentication, authorization, user provider, role-ok, access control, FOS user bundle

Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.

ELTE, Informatikai Kar december 12.

Pénzügyi algoritmusok

Programozási technológia

Hardver és szoftver követelmények

Könyvtári címkéző munkahely

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Hello World Servlet. Készítsünk egy szervletet, amellyel összeadhatunk két számot, és meghívásakor üdvözlőszöveget ír a konzolra.

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Webes alkalmazások fejlesztése 6. előadás. Állapotfenntartás (ASP.NET) 2015 Giachetta Roberto

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Szerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22

MVC Java EE Java EE Kliensek JavaBeanek Java EE komponensek Web-alkalmazások Fejlesztői környezet. Java Web technológiák

Szoftvertechnológia alapjai Java előadások

OOP: Java 8.Gy: Gyakorlás

Grafikus felhasználói felületek. Dr. Szendrei Rudolf Informatikai Kar Eötvös Loránd Tudományegyetem. Programozási technológia I. Dr.

Concurrency in Swing

Átírás:

Eötvös Loránd Tudományegyetem Informatikai Kar Webes alkalmazások fejlesztése 10. előadás Szolgáltatás alapú rendszerek megvalósítása (ASP.NET WebAPI) Cserép Máté mcserep@inf.elte.hu http://mcserep.web.elte.hu Készült Giachetta Roberto jegyzete alapján http://www.inf.elte.hu/karunkrol/digitkonyv/

Konfiguráció A.NET alkalmazások konfigurációját általában konfigurációs fájlban tároljuk (app.config, vagy web.config), amely számos paraméterét tartalmazhatja a működésnek, pl.: a működés során változó beállítások (pl. szolgáltatás címe, adatbázis elérése) az alkalmazás felépítéséhez szükséges adatok (pl. befecskendezett osztályok) a platformmal kapcsolatos beállítások (pl..net verzió, csomagok) a konfiguráció automatikusan átkerül a fordítási könyvtárba, és átveszi a futtatható állomány nevét ELTE IK, Webes alkalmazások fejlesztése 10:2

Konfiguráció A fájl appsettings eleme tartalmazza az egyedi beállításokat (kulcs/érték párokként), amelyeket a programban lekérhetünk Pl.: <?xml version="1.0" encoding="utf-8"?> <configuration> <runtime> <!-- platform --> <connectionstrings> <!-- adatbázisok --> <appsettings> <!-- alkalmazás beállításai --> <add key="serviceaddress" value="http://localhost:19243" /> <!-- a szolgáltatás címe --> ELTE IK, Webes alkalmazások fejlesztése 10:3

Konfiguráció elérése A konfigurációt kódban a ConfigurationManager osztály segítségével kezelhetjük a beállításokat az AppSettings gyűjteményben találjuk (kulcs/érték párokként) az értéket szövegként kapjuk meg amennyiben a konfiguráció nem található, vagy a beállítás nincs a konfigurációban null értéket kapunk pl.: String serviceaddress = ConfigurationManager.AppSettings["ServiceAddr"]; ELTE IK, Webes alkalmazások fejlesztése 10:4

Eseménynaplózás Összetett rendszereknél célszerű a tevékenységek követésére eseménynaplót vezetni (event logging) célja, hogy megértsük a szoftver végrehajtási folyamatát, teljesítményét, könnyebben azonosítsuk a hibákat és a biztonságra veszélyes tevékenységeket különösen fontos, ha nincs felhasználói interakció (pl. szolgáltatások) a napló lehet egy fájl, adatbázis, vagy külső szolgáltatás, amely biztosítja a napló elemzését is (pl. LogStash) a naplóbejegyezések rendelkeznek időponttal (when), hellyel (where), azonosítóval (who) és leírással (what) ELTE IK, Webes alkalmazások fejlesztése 10:5

Eseménynaplózás A naplózott események köre az alkalmazás jellegétől függ, célszerű naplózni: alkalmazásbeli hibák (pl. csatlakozás, konfiguráció, külső hívások, teljesítmény), váratlan események magasabb kockázatú tevékenységek (pl. felhasználó azonosítás és hozzáférés, felhasználó hozzáadása/törlése, rendszerbeli folyamatok igénybevétele, konfiguráció változtatás) validációs események (pl. bemenő adatok hibái) eseménynaplózás tevékenységei (indítás, leállítás, szüneteltetés) ELTE IK, Webes alkalmazások fejlesztése 10:6

Eseménynaplózás A bejegyzés szintje adja meg az üzenet fontosságát, célját, pl.: fatális (fatal): olyan hibaesemény, amely miatt az alkalmazás összeomlott hiba (error): olyan hibaesemény, amely után az alkalmazás folytatta munkáját (de keletkezhetett hibás adat) figyelmeztetés (warn): esetleges mellékhatás, hibalehetőség információ (info): egyéb információ tesztelés (debug): a fejlesztéshez és teszteléshez használt információ nyomkövetés (trace): a felmerült hiba pontos leírása ELTE IK, Webes alkalmazások fejlesztése 10:7

Eseménynaplózás Több programcsomag is elérhető, amely biztosítja az eseménynaplózást, az egyik legnépszerűbb az NLog a naplózást a Logger osztály biztosítja, és annak szintnek megfelelő műveletei (Info, Error, ) az üzenetek mellett kivételek naplózását is megkönnyíti a naplót adott névre, vagy osztályra hozhatjuk létre (LogManager.GetCurrentClassLogger(), LogManager.GetLogger(<név>)) konfigurációs fájlban beállítható az naplózás módja, formája és szintje alapértelmezetten az NLog.config fájl, de használjuk az alkalmazás konfigurációját is ELTE IK, Webes alkalmazások fejlesztése 10:8

Eseménynaplózás Pl.: Logger mylogger = Logmanager.GetLogger("model"); mylogger.info("processing started."); // információ kiírása try { // feldolgozás mylogger.info("processing finished."); } catch (Exception ex) { mylogger.error("processing aborted."); // hibajelzés mylogger.trace("exception occured. ", ex); // kiírjuk a kivétel részleteit } ELTE IK, Webes alkalmazások fejlesztése 10:9

Eseménynaplózás Pl.: <nlog > <targets> <target xsi:type="file" name="f" filename="${basedir}/logs/${shortdate}.log" layout="${longdate} ${level} ${message}" /> <! a naplózás a megadott fájlba történik a megadott formátumban --> <rules> <logger name="model" minlevel="debug" writeto="f" /> <!-- a modell naplója Debug szinting írja a fenti fájlt --> ELTE IK, Webes alkalmazások fejlesztése 10:10

Példa Feladat: Valósítsuk meg az utazási ügynökség épületeit karbantartó asztali alkalmazást. kliens oldalon kiemeljük a változtatható értékeket (szolgáltatás címe, képek méretezése) a konfigurációba kliens és szerver oldalon is bevezetünk eseménynaplózást (fájlba) kliens oldalon a perzisztenciát naplózzuk, a végrehajtott kéréseket (info), az esetleges nem várt visszajelzéseket (warning), illetve a keletkezett kivételeket (error) szolgáltatás oldalon a felhasználói funkciókat (pl. bejelentkezés), illetve szintén a kivételeket naplózzuk ELTE IK, Webes alkalmazások fejlesztése 10:11

Példa Tervezés (telepítés): ELTE IK, Webes alkalmazások fejlesztése 10:12

Példa Megvalósítás (App.xaml.cs): String serviceaddress = ConfigurationManager. AppSettings["ServiceAddress"]; // beállítás lekérdezése a konfigurációból if (String.IsNullOrEmpty(serviceAddress)) { } // ellenőrizzük, hogy sikerült-e beolvasni _model = new TravelAgencyModel( new TravelAgencyServicePersistence( serviceaddress)); ELTE IK, Webes alkalmazások fejlesztése 10:13

Példa Megvalósítás (TravelAgencyServicePersistence.cs): try { _log.info("get query on service " + _client.baseaddress + ", path: api/buildings/"); // információ kiírása az eseménynaplóba } catch (Exception ex) { _log.error(ex, "GET query aborted with exception."); // hiba kiírása az eseménynaplóba a kivétel // tartalmával } ELTE IK, Webes alkalmazások fejlesztése 10:14

Függőség befecskendezés A végrehajtás során egy réteg (client) által használt szolgáltatás (service) egy, az adott körülmények függvényében alkalmazható megvalósítása kerül alkalmazásra A szolgáltatás konkrét példánya meghatározható függőség befecskendezés segítségével, amely során egy külső programkomponens (injector) állapítja meg a függőséget injector client «interface» service service ELTE IK, Webes alkalmazások fejlesztése 10:15

Függőség befecskendezés A szolgáltatások befecskendezése szükségessé teszi a megvalósítás statikus (fordítási időben) történő ismeretét, ez korlátozza a program hasznosítását nem változtatható a megvalósítás futás közben, noha a körülmények változhatnak nem bővíthető a program újabb megvalósítással Az IoC tároló (IoC container) egy olyan Inversion of Control paradigmájú komponens, amely lehetőséget ad szolgáltatások megvalósításának dinamikus (futási idejű) betöltésére egy központi regisztráció, amelyet minden programkomponens elérhet, és felhasználhat ELTE IK, Webes alkalmazások fejlesztése 10:16

IoC tároló a típusokat (elsősorban) interfész alapján azonosítja, és az interfészhez csatolja a megvalósító osztályt a tárolóba történő regisztrációkor (Register) megadjuk a szolgáltatás interfészét és megvalósításának típusát (vagy példányát) a szolgáltatást interfész alapján kérjük le (Resolve), ekkor példányosul a szolgáltatás amennyiben a szolgáltatásnak függősége van, a tároló azt is példányosítja A Unity programcsomag egy általánosan használható IoC tárolót biztosít, amely lehetővé teszi a regisztráció konfigurációs fájlban történő elvégzését ELTE IK, Webes alkalmazások fejlesztése 10:17

IoC tároló Pl. : interface ICalculator // szolgáltatás interfésze { Double Compute(Double value); } class LogCalculator : ICalculator // a szolgáltatás egy megvalósítása { public Double Compute(Double value) { return Math.Log(value); } } ELTE IK, Webes alkalmazások fejlesztése 10:18

IoC tároló interface IVisualization { void PrintComputation(); } class ConsoleVisualization : IVisualization { private ICalculator calculator; // függőség public ConsoleVisualization(ICalculator c) { calculator = c; } // konstruktor befecskendezés } public void PrintComputation() { } ELTE IK, Webes alkalmazások fejlesztése 10:19

IoC tároló Pl. : UnityContainer c = new UnityContainer(); // tároló példányosítása c.registertype<icalculator, LogCalculator>(); c.registertype<ivisualization, ConsoleVisualization>(); // szolgáltatások regisztrációja IVisualization visualization = c.resolve<ivisualization>(); // szolgáltatás lekérése (példányosítással) // egy ConsoleVisualization példányt, és benne // egy LogCalculator példányt kapunk vissza ELTE IK, Webes alkalmazások fejlesztése 10:20

IoC tároló megvalósítása A tároló beállítása elhelyezhető konfigurációs fájlban is a unity elemben, pl.: <configuration> <unity > <container> <register type="icalculator" mapto="logcalculator" /> </container> </unity> </configuration> a konfiguráció a LoadConfiguration() művelettel tölthető be ELTE IK, Webes alkalmazások fejlesztése 10:21

IoC tároló webes alkalmazásokban ASP.NET alkalmazások is támogatják IoC tárolók használatát függőségek kezelésére, és automatizáljak a típusok feloldását mivel számos típus példányosítását a rendszer felügyeli (pl. vezérlők), ezért a függőségek kezelése nem valósítható meg kódban történő átadással a függősék kezelését az IDependencyResolver interfészt megvalósító típus biztosítja, amelynek példányát a HttpConfiguration típus DependencyResolver tulajdonságának kell átadnunk elsőként az interfészt kell megvalósítanunk egy IoC tároló használatával a Register műveletben beállíthatjuk a függőségeket ELTE IK, Webes alkalmazások fejlesztése 10:22

IoC tároló webes alkalmazásokban Pl. : class UnityResolver : IDependecyResolver { } // függőségkezelő megvalósítása Unity tárolóval public static void Register( config) { UnityContainer container = new UnityContainer(); config.dependencyresolver = new UnityResolver(container); // a típusok feloldása már automatikus } ELTE IK, Webes alkalmazások fejlesztése 10:23

szolgáltatás kliens Szolgáltatások tesztelése A szolgáltatás alapú rendszerek összetett struktúrájuknak köszönhetően számos komponensből, rétegből épülnek fel nézet nézetmodell modell perzisztencia vezérlő modell perzisztencia a felépítésből adódóan az egységtesztek mellett nagy hangsúlyt kap az integrációs és rendszertesztek több komponens együttes viselkedését ellenőrizzük (pl. modell-nézetmodell, modellperzisztencia, perszisztenciavezérlő) ugyanakkor kizárjuk a külső tényezőket (pl. adatbázis, hálózat) ELTE IK, Webes alkalmazások fejlesztése 10:24

Szolgáltatások tesztelése A szolgáltatás tesztelését célszerű felügyelt környezetben, a teszten belül elvégezni mivel a szolgáltatás webszervert igényel, a Web API biztosít egy könnyűsúlyú webszervert (HttpServer), amely lehetővé teszi a szolgáltatás futtatását közvetlenül a memóriában, hálózati kapcsolat igénybevétele nélkül a webszerver automatikusan csatlakoztatja a szolgáltatást (és vezérlőt), amennyiben hivatkozva van a projektben, csak a konfigurációt (HttpConfiguration) kell átadnunk a kliens (HttpClient) példányosításakor átadhatjuk a szervert, így minden kliensbeli kérés a memóriában hajtódik végre ELTE IK, Webes alkalmazások fejlesztése 10:25

Szolgáltatások tesztelése Pl. : HttpConfiguration config = ; WebApiConfig.Register(config); // betölthetjük közvetlenül a szolgáltatás // konfigurációját HttpServer server = new HttpServer(config); // memóriabeli szerver létrehozása, a vezérlők // automatikusan betöltődnek HttpClient client = new HttpClient(server); // kliens csatlakoztatása a szerverhez client.getasync(http://server/api/products); // a kérés a memóriában fut le ELTE IK, Webes alkalmazások fejlesztése 10:26

Példa Feladat: Valósítsuk meg az utazási ügynökség épületeit karbantartó asztali alkalmazást. valósítsuk meg a függőségek (modell, perzisztencia) kezelését Unity tárolóval mindkét oldalon a kliens esetén a konfigurációba helyezzük a felépítést, és az alkalmazás (App) tartalmazza a tárolót a szerver esetén a konfigurációs művelet (Register) kezeli a tárolót, amit kódban állítunk össze készítsünk integrációs tesztet, amely a perzisztencia és a szolgáltatás (vezérlők) együttes működését ellenőrzi (PersistenceControllerIntegrationTest) az entitásmodell tartalmát természetesen szimuláljuk ELTE IK, Webes alkalmazások fejlesztése 10:27

Példa Tervezés (tesztelés): Service::WebApiConfig + Register(HttpConfiguration) :void IDependencyResolver Service::UnityResolver # container :IUnityContainer + BeginScope() :IDependencyScope + Dispose() :void + GetService(Type) :object + GetServices(Type) :IEnumerable<object> + UnityResolver(IUnityContainer) Tests::PersistenceControllerIntegrationTest - _buildingdata :List<Building> - _buildingimagedata :List<BuildingImage> - _buildingimagemock :Mock<DbSet<BuildingImage>> - _buildingmock :Mock<DbSet<Building>> - _citydata :List<City> - _citymock :Mock<DbSet<City>> - _entitymock :Mock<ITravelAgencyEntities> - _persistence :ITravelAgencyPersistence - _server :HttpServer + Cleanup() :void + Initialize() :void + PersistenceControllerIntegrationCreateBuildingsAsyncTest() :void + PersistenceControllerIntegrationDeleteBuildingsAsyncTest() :void + PersistenceControllerIntegrationReadBuildingsAsyncTest() :void ELTE IK, Webes alkalmazások fejlesztése 10:28

Példa Megvalósítás (WebApiConfig.cs): // IoC tároló az adatbázis kezeléséhez UnityContainer container = new UnityContainer(); container.registertype<itravelagencyentities, TravelAgencyEntities>(); // az IoC tárolónkat fogja a rendszer használni a // függőségek feloldására config.dependencyresolver = new UnityResolver(container); ELTE IK, Webes alkalmazások fejlesztése 10:29

Példa Megvalósítás (PersistenceControllerIntegrationTest.cs): // webszolgáltatás inicializációja HttpConfiguration config = new HttpConfiguration(); WebApiConfig.Register(config); // IoC tároló az adatbázis kezeléséhez UnityContainer container = new UnityContainer(); container.registerinstance<itravelagencyentities>( _entitymock.object); // itt egy példányt regisztrálunk be ELTE IK, Webes alkalmazások fejlesztése 10:30

Példa Megvalósítás (PersistenceControllerIntegrationTest.cs): config.dependencyresolver = new UnityResolver(container); _server = new HttpServer(config); // memóriában futó HTTP szerver _persistence = new TravelAgencyServicePersistence( "http://server", _server); // ehhez csatlakozik a kliens ELTE IK, Webes alkalmazások fejlesztése 10:31