Skip to main content

Posts

Showing posts with the label dependency injection

Using Extensions Methods for DI setup

This days I saw a pretty nice idea of implementing the setup part of a DI container – when you make the setup from code and not from configuration file. Usually when you are working with DI on a big project, you a piece of code for each component (assembly) that register into the container the instances for that component - ContainerInstaller. When you start the application or load a specific container you need to call that specific class end register all the items for that class. public class FooInstaller { public void Install(IContainer container) { container.Register<...>(...); container.Register<...>(...); } } This can be made automatically, if you define an interface like IInstaller. Using reflection or other mechanism you can automatically find this installers and run them. Another solution that I think that is pretty interesting is to define an extension method for each component (assembly) – an extension method of builder. E...

Dependency Injection framework for WinRT - Widows 8 application

Am inceput sa lucrez la o aplicatie metro style pentru Windows 8. Toate bune si frumoase pana am ajuns in momentul in care am dorit sa folosesc un framework de DI. Cum inca vorbim de VS2011 BETA si un API redus pentru aplicatile metro style, m-am trezit ca nici un framework consacrat precum Unity, Ninject, Windsor nu a fost portat inca pentru acest tip de aplicatii. Cauza pentru care inca nu a fost inca portat este destul de clara. Pentru aplicatiile metro style pentru Windows 8, nu folosim .NET Core si un .NET Framework, care are un API mult mai sarac. Multe functionalitati, mai ales din zona reflection lipsesc. Am gasit pe codeplex un framework pentru WinRT, care se numea MetroIoc. http://metroioc.codeplex.com/ Parea destul de usor de folosit, asa ca am zis sa ii dau o sansa, sa vad daca functioneaza si daca este ce caut. API este foarte asemanator cu cel de la Unity, asa ca din punct de vedere a setup-ului la container l-am putut face foarte repede. Am pregatit si o metoda de te...

Ioc - Autofac

Related posts: IoC Definitie Ninject Unity Windsor Autofac Structure Map MEF Concluzie Astăzi a venit rîndul la Autofac ( http://code.google.com/p/autofac/ ) sa fie prezentat. Clasa care se ocupa de container se numește ContainerBuilder . Folosind aceasta clasa putem sa înregistram sau sa rezolvam orice componenta. La fel ca si Ninject, paternul folosit pentru setup-ul containerului este fluent. Mai jos puteți sa găsiți un exemplu care arata cum se poate înregistra un element în container. ContainerBuilder containerBuilder = new ContainerBuilder(); containerBuilder .RegisterType<OderService>() .As<IOrderService>(); Trebuie sa aveti grija ca intai se specifica clasa care implementează tipul pe care dorim sa îl mapam și doar apoi interfata (sau clasa care vrem sa o mapam). Autofac este destul de deștept ca sa poată detecta cu ce obiect vrem sa mapam un anumit tip. Este de ajuns sa specificam doar OrderService: containerBuilder .RegisterType<OderSe...

Ioc -Ninject

Related posts: IoC Definitie Ninject Unity Windsor Autofac Structure Map MEF Concluzie Cu toți am auzit de IoC, dependency injection și toate nebuniile legate de ele. Într-un post anterior am definit Ioc (http://vunvulearadu.blogspot.com/2010/11/ioc-dependency-injection-teorie.html ) și am prezentat în cîteva cuvinte Ioc. In funcție de cum o sa îmi permită timpul vreau sa trec peste mai multe framework-uri de acest gen. Iar apoi vreau sa compar aceste framework-uri și sa vedem plusurile și minusurile la fiecare. In toate exemplele pe care urmează sa le dau o sa folosim următorul model de date: interface IComputeService { public int Calculate(int value); } class ComputeService : IComputerService { public ComputerService(int state) { } public int Calculate(int value) { } } interface IOrderService { public int GetTotal(); } class OrderService { public OrderService(IComputerService computerService) { } public int GetTotal() { } ...

Ioc( Dependency Injection) - Teorie

Plecam de la principiul substitutiei a lui Liskovs: Daca S este un subtip a lui T, atunci obiectul de tip T, in interiorul programului, poate sa fie înlocuit de obiectul de tip S fara sa se altereze funcționalitatea programului. Sursa Pe scurt, acesta se refera la faptul ca putem sa avem referinte la interfete si nu la tipuri concrete in interiorul aplicatiei, a.i. in orice moment putem sa înlocuim implementarea interfeței, fara a fi nevoiti sa schimbam codul. Dependency injection se refera la faptul ca responsabilitatea initalizarii, construirii si a duratei de viata a unui obiect nu o are obiectul care contine referinta la obiectul nostru. Aceste elemente o sa fie controlate de catre un controler. Exista trei tipuri prin care putem sa injectam dependentele prin: constructor; proprietati; metode; Prima varianta este cea mai des folosita. Prin acest mecanism o sa putem fi siguri ca dependența a fost injectata in interiorul obiectului nostru. Daca vrem sa injectam prin proprietati atunc...

Autofac 2.3

De cateva zile s-a lansat o noua versiune de Autofac( v. 2.3). Am dat jos ultima versiune si am inceput sa ma joc cu acesta si iata ce am descoperit: Ce ne ofera Autofac: dependency injection; inversion of control( IoC); suportat de diferite platforme( ASP.NET MVC, Silverlight, etc); Nu este atat de complex precum Windsor de la Castle Project, dar ofera functiile de baza de care am avea nevoie pentru un proiect de dimensiuni mici. Iata cum se foloseste: Clasa de baza prin care putem sa inregistram sau sa obtinem instance este "ContainerBuilder" var autofac=new ContainerBuilder(); Pentru a inregistra putem folosi de metoda "Register". autofac.Register(component=> new NumeClasa()); Pentru a obtine o componenta din container trebuie apelata metoda "Resolve": autofac.Resolve<NumeClasa>(); In cazul in care constructorul clasei noastre are nevoie de anumiți parametrii care au fost deja înregistrați putem sa apelam metoda "Resolve" in momentul ...