SlideShare a Scribd company logo
1 of 58
Inject Your Dependencies
   Inversion of control
        Anže Vodovnik
   (anze@studiopesec.com)
Kdo sem?
•   Programski arhitekt
•   10+ let izkušenj (C#, Java...)
•   http://www.linkedin.com/in/avodovnik
•   @avodovnik
•   http://lab.studiopesec.com
Kdo je Studio Pešec?
• digital production company
• visoko-performančne, skalabilne (spletne)
  aplikacije
• Razvoj po meri
• Svetovanje
• Marketing
Job.ru
         • 350.000+ unikatnih
           obiskovalcev na dan
         • ASP.NET & MySQL
         • 9 strežnikov
CentrSource
              • ASP.NET 4 & MSSQL
              • Kanada, Madžarska, Slo
                venija
              • 120.000 unikatnih
                obiskovalcev + tiskan
                katalog
              • Oglaševalska platforma
                za direktni marketing
Viva.si
          • ASP.NET MVC &
            MySQL
          • Netko
          • 6000 dnevno
            unikatnih
            uporabnikov
          • Zdravstvena skupnost
MojeDelo.com
               • Vodilni zaposlitveni
                 portal v Sloveniji
               • ASP.NET 4.0 in SQL
                 Azure
               • 35.000 dnevno
                 unikatnih
                 obiskovalcev
               • Windows Azure
Agenda
•   Odvisnosti v aplikaciji
•   Načrtovalski vzorci
•   Dependency Injection 101
•   Primeri dobrih ogrodji
•   Realnost: moja aplikacija in jaz
Odvisnosti v aplikaciji
• Kaj je odvisnost?
• Podatkovni nivo & baze
  – MySQL, MSSQL, Azure
• Poslovni nivo
• Zunanje storitve & komponente
• .NET framework komponente
  – File objekti
  – Web objekti (npr. HttpContext, Request...)
Odvisnosti: pogled z vrha


      Poslovna
UI               DAL    Baza
       logika
In?
• Več-nivojska arhitektura je logična ločitev
• Koda je vseeno tesno povezana in odvisna


                                              }
  –   Stranka 1: MySQL
  –   Stranka 2: MSSQL
                                                  Različne verzije za vse?
  –   Stranka 3: Azure SQL
  –   Stranka N: Oracle? („$!“#?!=@„!%“!!“)
In? (cnt‘d)
• Težko izoliramo posamezno komponento
  – Težje testiranje
  – Težje prilagajanje
  – Težje vzdrževanje
  – Težje spreminjanje / nadgrajevanje
Tesna sklopljenost
• Sword in Samurai sta sklopljena
• Ne moremo zamenjati oziroma dodati orožja
  brez spreminjanja Samurai razreda
• Vpeljemo prvi nivo abstrakcije: interface
REŠITEV 1

PROGRAMMING TO AN INTERFACE
Rešitev 1
• Še vedno statična odvisnost med Samurai in
  Sword razredom
• Logika (Attack) ni več neposredno odvisna od
  implementacije
REŠITEV 2

FACTORY PATTERN
Rešitev 2
• Še vedno je tesno sklopljen
• Še vedno je statična povezava
REŠITEV 3

SERVICE LOCATOR
Rešitev 3
     + Samurai ni več statično
     odvisen od Sword razreda
     + Večja
     razširljivost, testabilnost in
     reusability
     - Odvisno od sekvence
        (Assembler, Samurai)
     - Težavno postavljenje (test)
     - Lookup problemi?
REŠITEV 4

DEPENDENCY INJECTION
DEPENDENCY INJECTION

INTERFACE INJECTION
DEPENDENCY INJECTION

SETTER INJECTION
DEPENDENCY INJECTION

CONSTRUCTOR INJECTION
Dependency injection
• Inversion of Control = preveč generičen pojem
• Hollywood Principle
  – Don’t call us, we’ll call you
• Martin Fowler predlaga: Dependency Injection
Dependency Injection
• Instanciranje na roko?
• Kaj pa povezani razredi?
  – new Glock(new Ammo(15, 3));
• Boilerplate koda
• Težko upravljanje (N mnogo lokacij?)
• Upravljanje z življenjskim ciklom
Dependency Injection
•   Rešitev: IoC Container
•   Ninject
•   Spring Framework
•   Unity
•   StructureMap
•   Castle Windsor
IoC container
• Prevzame dolgočasen del kode
IoC container
1. Get<Samurai>()
2. Obstaja mapping?
3. Reflection nad Samurai razredom
  1. Najde popoln konstruktor (največ „resolvable“
     odvisnosti ali [Inject] atribut)
  2. Najde Setterje z [Inject] atributom
4. Instancira razred & odvisnosti
  1. Za vsako odvisnost pokliče .Get<Dependency>()
IoC container
• V ozadju uporablja
  System.Reflection.Emit.DynamicMethod
• Resolva se v delegat, koda je hitrejša



• Lahko uporabite reflection (v nekaterih primerih
  je to občutno hitrejše)
Dependency Injection 101
• Razrešitev
  – Kontekstualna ([Named(„Weak“)]
  – Multiple-bindings (IEnumerable<IWeapon>)
• Upravljanje z življenjskim ciklom
  – Transient, Singleton, Thread, Request (Http)
Resolution: multiple bindings
Resolution: named bindings
Resolution: več opcij
• Constraints:
    –   Imena
    –   Binding Meta-podatki
    –   Kontekst „tarče“
    –   predikati
Resolution: več opcij
Upravljanje z življenjskim ciklom
•   Inversion of control? AHA!
•   Instanciranje po potrebi
•   Dispose po potrebi
•   Enostaven nadzor & menjava
    – Singleton | per-request | per-thread | lasten
      scope
• Privzeto: InTransientScope
Upravljanje z življenjskim ciklom
•   Transient .InTransientScope()
•   Singleton .InSingletonScope()
•   Thread .InThreadScope()
•   Request .InRequestScope()
•   Custom .InScope(Func<object> o)
Moduli & nalaganje
• IKernel kernel = new
  StandardKernel(new
  WeaponsModule(useMeleeWeapons));

• Kernel.Load(„*.dll“);
Kako zadevo uporabiti v resničnem življenju?

NINJECT & MVC 3
DI & MVC3 = match made in heaven
• MVC3 je predstavil nov interface:
  IDependencyResolver

• DependencyResolver.SetResolver(new
  UnityDependencyResolver(container));
Zakaj?


     Poslovna
UI                DAL   Baza
      logika
Zakaj?



Controller   „Services“    DAL   Baza
Zakaj?
Kako?
• NuGet!
• Ninject.MVC3
  – Ninject
  – WebActivator
Ninject & MVC3

       „Assembler“
Ninject & MVC3
Ninject & MVC3
Kdaj uporabiti DI?
• DI = dobra ideja skoraj vedno
• Vprašanje: ročno ali samodejno?
Ročno ali samodejno?
Ročni DI                                   Samodejno (IoC container)
Enostavno, skoraj nič učenja               Konsistentnost; za večje ekipe, velik +
Nič „črne magije“ – enostavno iskanje      Deklerativnost: večina pravil je
klicev (a->b->c)                           deklerativnih, eno mesto za opis pravil,
                                           eno mesto za spremembo teh pravil
Tudi razvijalci, ki ne razumejo DI lahko   Manj tipkanja: ne rabimo se ukvarjat s
sodelujejo na projektu.                    pisanjem Factory razredov, ipd.
                                           Pomaga pri testiranju! Zelo.
Povzetek
•   Dependency Injection
•   Bolj specifičen termin kot Inversion of Control
•   IoC container rešuje mnogo problemov
•   Razklopljenost modulov/servisov
Viri
• http://www.martinfowler.com/articles/injection.html
• http://lab.studiopesec.com
• http://stackoverflow.com/questions/871405/why-do-i-need-an-ioc-
  container-as-opposed-to-straightforward-di-code
• http://ninject.org
• MSDN: Design Patterns – Dependency Injection
  http://msdn.microsoft.com/en-us/magazine/cc163739.aspx
Vprašanja
• http://www.studiopesec.com
• @studiopesec
• anze@studiopesec.com

More Related Content

Viewers also liked

Zenith tv shot semana26
Zenith tv shot semana26Zenith tv shot semana26
Zenith tv shot semana26Zenith España
 
HTM2118-South Korea Yvonne,Cathy,Connie and Susan
HTM2118-South Korea Yvonne,Cathy,Connie and SusanHTM2118-South Korea Yvonne,Cathy,Connie and Susan
HTM2118-South Korea Yvonne,Cathy,Connie and Susansouthkorea
 
Bloomberg Rusya Eki
Bloomberg Rusya EkiBloomberg Rusya Eki
Bloomberg Rusya EkiCeren Oz
 
World drug report_2011
World drug report_2011World drug report_2011
World drug report_2011Erbol Digital
 
China Media Profile 26 Oct
China Media Profile 26 OctChina Media Profile 26 Oct
China Media Profile 26 OctOrmita Hong Kong
 
Bi za pr - KT - LMS 162
Bi za pr - KT - LMS 162Bi za pr - KT - LMS 162
Bi za pr - KT - LMS 162Stripovi Klub
 
Órganos artificiales
Órganos artificiales Órganos artificiales
Órganos artificiales KEVINFLAT
 
Campaña 3 Yves Rocher Francia
Campaña 3 Yves Rocher FranciaCampaña 3 Yves Rocher Francia
Campaña 3 Yves Rocher FranciaKarla Banda
 
Quran in Hindi Part-9
Quran in Hindi Part-9Quran in Hindi Part-9
Quran in Hindi Part-9Sharaz Ahmed
 
ALSO Company Presentation 2015
ALSO Company Presentation 2015ALSO Company Presentation 2015
ALSO Company Presentation 2015Ari Rikkilä
 
Seminario 8. Test de Chi - cuadrado.
Seminario 8. Test de Chi - cuadrado.Seminario 8. Test de Chi - cuadrado.
Seminario 8. Test de Chi - cuadrado.martaelices
 
Comercio Electronico.
Comercio Electronico.Comercio Electronico.
Comercio Electronico.yanessagh
 

Viewers also liked (19)

Zenith tv shot semana26
Zenith tv shot semana26Zenith tv shot semana26
Zenith tv shot semana26
 
Rustlick Catalog
Rustlick CatalogRustlick Catalog
Rustlick Catalog
 
Deutsche EuroShop FY08 results
Deutsche EuroShop FY08 resultsDeutsche EuroShop FY08 results
Deutsche EuroShop FY08 results
 
HTM2118-South Korea Yvonne,Cathy,Connie and Susan
HTM2118-South Korea Yvonne,Cathy,Connie and SusanHTM2118-South Korea Yvonne,Cathy,Connie and Susan
HTM2118-South Korea Yvonne,Cathy,Connie and Susan
 
Bloomberg Rusya Eki
Bloomberg Rusya EkiBloomberg Rusya Eki
Bloomberg Rusya Eki
 
World drug report_2011
World drug report_2011World drug report_2011
World drug report_2011
 
Articol
ArticolArticol
Articol
 
China Media Profile 26 Oct
China Media Profile 26 OctChina Media Profile 26 Oct
China Media Profile 26 Oct
 
Bi za pr - KT - LMS 162
Bi za pr - KT - LMS 162Bi za pr - KT - LMS 162
Bi za pr - KT - LMS 162
 
Órganos artificiales
Órganos artificiales Órganos artificiales
Órganos artificiales
 
Campaña 3 Yves Rocher Francia
Campaña 3 Yves Rocher FranciaCampaña 3 Yves Rocher Francia
Campaña 3 Yves Rocher Francia
 
Resolved list
Resolved listResolved list
Resolved list
 
Quran in Hindi Part-9
Quran in Hindi Part-9Quran in Hindi Part-9
Quran in Hindi Part-9
 
ALSO Company Presentation 2015
ALSO Company Presentation 2015ALSO Company Presentation 2015
ALSO Company Presentation 2015
 
Seminario 8. Test de Chi - cuadrado.
Seminario 8. Test de Chi - cuadrado.Seminario 8. Test de Chi - cuadrado.
Seminario 8. Test de Chi - cuadrado.
 
CASE Network Report 84 - Economic Impact of a Potential Free Trade Agreement ...
CASE Network Report 84 - Economic Impact of a Potential Free Trade Agreement ...CASE Network Report 84 - Economic Impact of a Potential Free Trade Agreement ...
CASE Network Report 84 - Economic Impact of a Potential Free Trade Agreement ...
 
Non-Profits
Non-ProfitsNon-Profits
Non-Profits
 
Comercio Electronico.
Comercio Electronico.Comercio Electronico.
Comercio Electronico.
 
Lr world 2015-08-eng
Lr world 2015-08-engLr world 2015-08-eng
Lr world 2015-08-eng
 

Similar to Inject your dependencies

Developing a Web App from UX to Finish
Developing a Web App from UX to FinishDeveloping a Web App from UX to Finish
Developing a Web App from UX to FinishStudio Pešec
 
Splošni nasveti za spletne aplikacije
Splošni nasveti za spletne aplikacijeSplošni nasveti za spletne aplikacije
Splošni nasveti za spletne aplikacijeSamir Subašić
 
Entity framework code first migrations
Entity framework code first migrationsEntity framework code first migrations
Entity framework code first migrationsAndrej Tozon
 
Izkušnje pri uporabi ogrodja JSF za prenovo spletne aplikacije COBISS/OPAC
Izkušnje pri uporabi ogrodja JSF za prenovo spletne aplikacije COBISS/OPACIzkušnje pri uporabi ogrodja JSF za prenovo spletne aplikacije COBISS/OPAC
Izkušnje pri uporabi ogrodja JSF za prenovo spletne aplikacije COBISS/OPACbniz
 
Napredna diagnostika v Windows Azure
Napredna diagnostika v Windows AzureNapredna diagnostika v Windows Azure
Napredna diagnostika v Windows AzureDanijel Malik
 
Predstavitev CNAP
Predstavitev CNAPPredstavitev CNAP
Predstavitev CNAPcocentaina
 
MVVM in the Windows 8 and Windows Phone universe / MVVM v univerzumu Windows ...
MVVM in the Windows 8 and Windows Phone universe / MVVM v univerzumu Windows ...MVVM in the Windows 8 and Windows Phone universe / MVVM v univerzumu Windows ...
MVVM in the Windows 8 and Windows Phone universe / MVVM v univerzumu Windows ...Andrej Tozon
 
Continuous integration (CI) v praksi
Continuous integration (CI) v praksiContinuous integration (CI) v praksi
Continuous integration (CI) v praksiOto Brglez
 
Debugging (Silverlight + SQL Server)
Debugging (Silverlight + SQL Server)Debugging (Silverlight + SQL Server)
Debugging (Silverlight + SQL Server)Andrej Tozon
 
Uvedba sistema za upravljanje s spletnimi vsebinami
Uvedba sistema za upravljanje s spletnimi vsebinamiUvedba sistema za upravljanje s spletnimi vsebinami
Uvedba sistema za upravljanje s spletnimi vsebinamiAna Stanovnik (Veselko)
 
Virtualization and cloud computing (in Slovene)
Virtualization and cloud computing (in Slovene)Virtualization and cloud computing (in Slovene)
Virtualization and cloud computing (in Slovene)Tomislav Rozman
 
Ie8 - nove funkcionalnosti
Ie8 - nove funkcionalnostiIe8 - nove funkcionalnosti
Ie8 - nove funkcionalnostiValentin Bufolin
 

Similar to Inject your dependencies (14)

Developing a Web App from UX to Finish
Developing a Web App from UX to FinishDeveloping a Web App from UX to Finish
Developing a Web App from UX to Finish
 
Splošni nasveti za spletne aplikacije
Splošni nasveti za spletne aplikacijeSplošni nasveti za spletne aplikacije
Splošni nasveti za spletne aplikacije
 
Entity framework code first migrations
Entity framework code first migrationsEntity framework code first migrations
Entity framework code first migrations
 
Izkušnje pri uporabi ogrodja JSF za prenovo spletne aplikacije COBISS/OPAC
Izkušnje pri uporabi ogrodja JSF za prenovo spletne aplikacije COBISS/OPACIzkušnje pri uporabi ogrodja JSF za prenovo spletne aplikacije COBISS/OPAC
Izkušnje pri uporabi ogrodja JSF za prenovo spletne aplikacije COBISS/OPAC
 
Napredna diagnostika v Windows Azure
Napredna diagnostika v Windows AzureNapredna diagnostika v Windows Azure
Napredna diagnostika v Windows Azure
 
Predstavitev CNAP
Predstavitev CNAPPredstavitev CNAP
Predstavitev CNAP
 
MVVM in the Windows 8 and Windows Phone universe / MVVM v univerzumu Windows ...
MVVM in the Windows 8 and Windows Phone universe / MVVM v univerzumu Windows ...MVVM in the Windows 8 and Windows Phone universe / MVVM v univerzumu Windows ...
MVVM in the Windows 8 and Windows Phone universe / MVVM v univerzumu Windows ...
 
Continuous integration (CI) v praksi
Continuous integration (CI) v praksiContinuous integration (CI) v praksi
Continuous integration (CI) v praksi
 
Debugging (Silverlight + SQL Server)
Debugging (Silverlight + SQL Server)Debugging (Silverlight + SQL Server)
Debugging (Silverlight + SQL Server)
 
Uvedba sistema za upravljanje s spletnimi vsebinami
Uvedba sistema za upravljanje s spletnimi vsebinamiUvedba sistema za upravljanje s spletnimi vsebinami
Uvedba sistema za upravljanje s spletnimi vsebinami
 
Virtualization and cloud computing (in Slovene)
Virtualization and cloud computing (in Slovene)Virtualization and cloud computing (in Slovene)
Virtualization and cloud computing (in Slovene)
 
Ie8 - nove funkcionalnosti
Ie8 - nove funkcionalnostiIe8 - nove funkcionalnosti
Ie8 - nove funkcionalnosti
 
Dejan davidovič (i qpon) iqpon
Dejan davidovič (i qpon) iqponDejan davidovič (i qpon) iqpon
Dejan davidovič (i qpon) iqpon
 
77zzz66
77zzz6677zzz66
77zzz66
 

Inject your dependencies

  • 1. Inject Your Dependencies Inversion of control Anže Vodovnik (anze@studiopesec.com)
  • 2. Kdo sem? • Programski arhitekt • 10+ let izkušenj (C#, Java...) • http://www.linkedin.com/in/avodovnik • @avodovnik • http://lab.studiopesec.com
  • 3. Kdo je Studio Pešec? • digital production company • visoko-performančne, skalabilne (spletne) aplikacije • Razvoj po meri • Svetovanje • Marketing
  • 4. Job.ru • 350.000+ unikatnih obiskovalcev na dan • ASP.NET & MySQL • 9 strežnikov
  • 5. CentrSource • ASP.NET 4 & MSSQL • Kanada, Madžarska, Slo venija • 120.000 unikatnih obiskovalcev + tiskan katalog • Oglaševalska platforma za direktni marketing
  • 6. Viva.si • ASP.NET MVC & MySQL • Netko • 6000 dnevno unikatnih uporabnikov • Zdravstvena skupnost
  • 7. MojeDelo.com • Vodilni zaposlitveni portal v Sloveniji • ASP.NET 4.0 in SQL Azure • 35.000 dnevno unikatnih obiskovalcev • Windows Azure
  • 8. Agenda • Odvisnosti v aplikaciji • Načrtovalski vzorci • Dependency Injection 101 • Primeri dobrih ogrodji • Realnost: moja aplikacija in jaz
  • 9. Odvisnosti v aplikaciji • Kaj je odvisnost? • Podatkovni nivo & baze – MySQL, MSSQL, Azure • Poslovni nivo • Zunanje storitve & komponente • .NET framework komponente – File objekti – Web objekti (npr. HttpContext, Request...)
  • 10. Odvisnosti: pogled z vrha Poslovna UI DAL Baza logika
  • 11. In? • Več-nivojska arhitektura je logična ločitev • Koda je vseeno tesno povezana in odvisna } – Stranka 1: MySQL – Stranka 2: MSSQL Različne verzije za vse? – Stranka 3: Azure SQL – Stranka N: Oracle? („$!“#?!=@„!%“!!“)
  • 12. In? (cnt‘d) • Težko izoliramo posamezno komponento – Težje testiranje – Težje prilagajanje – Težje vzdrževanje – Težje spreminjanje / nadgrajevanje
  • 13.
  • 14. Tesna sklopljenost • Sword in Samurai sta sklopljena • Ne moremo zamenjati oziroma dodati orožja brez spreminjanja Samurai razreda • Vpeljemo prvi nivo abstrakcije: interface
  • 16.
  • 17. Rešitev 1 • Še vedno statična odvisnost med Samurai in Sword razredom • Logika (Attack) ni več neposredno odvisna od implementacije
  • 19.
  • 20. Rešitev 2 • Še vedno je tesno sklopljen • Še vedno je statična povezava
  • 22.
  • 23. Rešitev 3 + Samurai ni več statično odvisen od Sword razreda + Večja razširljivost, testabilnost in reusability - Odvisno od sekvence (Assembler, Samurai) - Težavno postavljenje (test) - Lookup problemi?
  • 26.
  • 28.
  • 30.
  • 31. Dependency injection • Inversion of Control = preveč generičen pojem • Hollywood Principle – Don’t call us, we’ll call you • Martin Fowler predlaga: Dependency Injection
  • 32. Dependency Injection • Instanciranje na roko? • Kaj pa povezani razredi? – new Glock(new Ammo(15, 3)); • Boilerplate koda • Težko upravljanje (N mnogo lokacij?) • Upravljanje z življenjskim ciklom
  • 33. Dependency Injection • Rešitev: IoC Container • Ninject • Spring Framework • Unity • StructureMap • Castle Windsor
  • 34. IoC container • Prevzame dolgočasen del kode
  • 35. IoC container 1. Get<Samurai>() 2. Obstaja mapping? 3. Reflection nad Samurai razredom 1. Najde popoln konstruktor (največ „resolvable“ odvisnosti ali [Inject] atribut) 2. Najde Setterje z [Inject] atributom 4. Instancira razred & odvisnosti 1. Za vsako odvisnost pokliče .Get<Dependency>()
  • 36. IoC container • V ozadju uporablja System.Reflection.Emit.DynamicMethod • Resolva se v delegat, koda je hitrejša • Lahko uporabite reflection (v nekaterih primerih je to občutno hitrejše)
  • 37. Dependency Injection 101 • Razrešitev – Kontekstualna ([Named(„Weak“)] – Multiple-bindings (IEnumerable<IWeapon>) • Upravljanje z življenjskim ciklom – Transient, Singleton, Thread, Request (Http)
  • 40. Resolution: več opcij • Constraints: – Imena – Binding Meta-podatki – Kontekst „tarče“ – predikati
  • 42. Upravljanje z življenjskim ciklom • Inversion of control? AHA! • Instanciranje po potrebi • Dispose po potrebi • Enostaven nadzor & menjava – Singleton | per-request | per-thread | lasten scope • Privzeto: InTransientScope
  • 43. Upravljanje z življenjskim ciklom • Transient .InTransientScope() • Singleton .InSingletonScope() • Thread .InThreadScope() • Request .InRequestScope() • Custom .InScope(Func<object> o)
  • 44. Moduli & nalaganje • IKernel kernel = new StandardKernel(new WeaponsModule(useMeleeWeapons)); • Kernel.Load(„*.dll“);
  • 45. Kako zadevo uporabiti v resničnem življenju? NINJECT & MVC 3
  • 46. DI & MVC3 = match made in heaven • MVC3 je predstavil nov interface: IDependencyResolver • DependencyResolver.SetResolver(new UnityDependencyResolver(container));
  • 47. Zakaj? Poslovna UI DAL Baza logika
  • 48. Zakaj? Controller „Services“ DAL Baza
  • 50. Kako? • NuGet! • Ninject.MVC3 – Ninject – WebActivator
  • 51. Ninject & MVC3 „Assembler“
  • 54. Kdaj uporabiti DI? • DI = dobra ideja skoraj vedno • Vprašanje: ročno ali samodejno?
  • 55. Ročno ali samodejno? Ročni DI Samodejno (IoC container) Enostavno, skoraj nič učenja Konsistentnost; za večje ekipe, velik + Nič „črne magije“ – enostavno iskanje Deklerativnost: večina pravil je klicev (a->b->c) deklerativnih, eno mesto za opis pravil, eno mesto za spremembo teh pravil Tudi razvijalci, ki ne razumejo DI lahko Manj tipkanja: ne rabimo se ukvarjat s sodelujejo na projektu. pisanjem Factory razredov, ipd. Pomaga pri testiranju! Zelo.
  • 56. Povzetek • Dependency Injection • Bolj specifičen termin kot Inversion of Control • IoC container rešuje mnogo problemov • Razklopljenost modulov/servisov
  • 57. Viri • http://www.martinfowler.com/articles/injection.html • http://lab.studiopesec.com • http://stackoverflow.com/questions/871405/why-do-i-need-an-ioc- container-as-opposed-to-straightforward-di-code • http://ninject.org • MSDN: Design Patterns – Dependency Injection http://msdn.microsoft.com/en-us/magazine/cc163739.aspx

Editor's Notes

  1. # Cool UML Diagram[&lt;&lt;IWeapon&gt;&gt;]^-.-[Sword],[Samurai] -.-&gt;[&lt;&lt;IWeapon&gt;&gt;],[Samurai] -.-&gt;[ServiceLocator],[Assembler] -.-&gt;[Sword],[Assembler] -.-&gt;[ServiceLocator],[Assembler] -.-&gt;[&lt;&lt;IWeapon&gt;&gt;]