Poslednji IoC kontejner u ovom serijalu je Castle Windsor. Ovaj IoC kontejner je deo Castle projekta iza koga stoji grupa iskusnih .Net developer-a.
Jednostavna implementacija IDependencyResolver interfejsa pomoću Castle Windsor IoC kontejnera bi izgledala ovako:
public class CastleWindsorDependencyResolver : IDependencyResolver { private IKernel kernel; public CastleWindsorDependencyResolver(IKernel kernel) { this.kernel = kernel; } public object GetService(Type serviceType) { try { return this.kernel.Resolve(serviceType); } catch { return null; } } public IEnumerable<object> GetServices(Type serviceType) { try { return this.kernel.ResolveAll(serviceType).Cast<IEnumerable<object>>(); } catch { return new List<object>(); } } }
Na kraju, konfigurisanje Castle Windsor IoC kontejnera treba izvršiti unutar Global.asax.cs fajla:
protected void Application_Start() { RegisterCastleWindsorDependencyResolver(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); } private void RegisterCastleWindsorDependencyResolver() { var container = new WindsorContainer() .Register(Component.For<HomeController>()) .Register(Component.For<IRepository>().ImplementedBy<ConcreteRepository>()); DependencyResolver.SetResolver( new CastleWindsorDependencyResolver(container.Kernel)); }