Dependency Injection - StructureMap

StructureMap je jedan od najstarijih a samim tim i najzrelijih IoC kontejnera za .Net. Prva stabilna verzija izašla je još 2004., a trenutno aktuelna verzija 2.6.1 je iz februara 2010. Jednostavna implementacija IDependencyResolver interfejsa pomoću StructureMap IoC kontejnera bi izgledala ovako: public class StructureMapDependencyResolver : IDependencyResolver { private readonly IContainer container; public StructureMapDependencyResolver(IContainer container) { this.container = container; } public object GetService(Type serviceType) { try { return this.container.GetInstance(serviceType); } catch { return null; } } public IEnumerable<object> GetServices(Type serviceType) { try { return this.container.GetAllInstances(serviceType).Cast<object>(); } catch { return new List<object>(); } } } Konfigurisanje SturctureMap kontejnera treba izvršiti unutar Global.asax.cs fajla: ...

2011-06-01 · 1 min · Ivan Franjic

Dependency Injection - Autofac

Autofac je još jedan IoC kontejner za .Net, takođe vrlo popularan. Odlikuje ga manja veličina biblioteka u odnosu na ostale IoC kontejnere, ali ne i nedostatak funkcionalnosti. Jednostavna implementacija IDependencyResolver interfejsa pomoću Autofac framework-a bi izgledala ovako: public class AutofacDependencyResolver : IDependencyResolver { private IContainer container; public AutofacDependencyResolver(Autofac.IContainer container) { this.container = container; } public object GetService(Type serviceType) { try { return this.container.Resolve(serviceType); } catch { return null; } } public IEnumerable<object> GetServices(Type serviceType) { try { Type type = typeof(IEnumerable).MakeGenericType( new Type[] { serviceType }); object obj = this.container.Resolve(type); return (IEnumerable<object>)obj; } catch { return new List<object>(); } } } Setup Autofac IoC kontejnera treba staviti u Global.asax.cs fajl: ...

2011-05-21 · 1 min · Ivan Franjic

Dependency Injection - Ninject

Ninject je open source DI framework, besplatan za ličnu i komercijalnu upotrebu. U .Net zajednici možda i najpopularniji. Odlikuje ga jednostavna i simpatična sintaksa, kao i vrlo dobra dokumentacija koja do detalja objašnjava njegovu upotrebu. Jednostavna implementacija IDependencyResolver interfejsa pomoću Ninject DI framework-a bi izgledala ovako: public class NinjectDependencyResolver : IDependencyResolver { private readonly IKernel kernel; public NinjectDependencyResolver(IKernel kernel) { this.kernel = kernel; } public object GetService(Type serviceType) { try { return this.kernel.Get(serviceType); } catch { return null; } } public IEnumerable<object> GetServices(Type serviceType) { try { return this.kernel.GetAll(serviceType); } catch { return new List<object>(); } } } Na kraju, potrebno je podesiti IoC kontejner unutar Global.asax.cs fajla: ...

2011-05-18 · 1 min · Ivan Franjic

Dependency Injection

U skoro svakom tutorijalu o ASP.NET MVC framework-u se pominje Dependency Injection. Međutim, IoC framework-a ima dosta, a svako ima neki omiljeni. U svim tim tutorijalima kada pišu o DI, autori uvek prezentuju jedan od IoC framwork-a, tako da je teško naći tutorijal ili blog na kome su dati primeri za više IoC framework-a. Zbog toga je teško odlučiti se koji koristiti, naročito ako ste tek počeli da učite. Zbog toga sam odlučio da napišem seriju postova u kojima ću prikazati neke od najpopularnijih IoC framework-a. ...

2011-05-12 · 1 min · Ivan Franjic

Dependency Injection - Unity

Jedno od glavnih poboljšanja koje nam MVC 3 donsi jeste bolja integracija sa IoC/DI kontejnerima. U ranijim verzijama MVC framework-a bilo je potrebno napraviti custom ControllerFactory. Međutim, postoji veliki broj IoC framework-a tako da je prirodnije da se komunikacija sa MVC framework-om odvija preko nekog interfejsa. Za tu svrhu postoji jedan vrlo jednostavan interfejs - IDependencyResolver: public interface IDepndencyResolver { object GetService(Type serviceType); IEnumerable<object> GetServices(Type serviceType); } I upravo implementacije ovog interfejsa treba da delegiraju zahteve za tipovima konkretnom IoC kontejneru. ...

2011-05-04 · 2 min · Ivan Franjic