Here is my working WindsorControllerFactory based on the book:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Castle.Windsor;
using Castle.Windsor.Configuration.Interpreters;
using Castle.Core.Resource;
using System.Reflection;
namespace WebUI {
public class WindsorControllerFactory : DefaultControllerFactory {
private WindsorContainer container;
public WindsorControllerFactory() {
this.container = new WindsorContainer(
new XmlInterpreter(new ConfigResource("castle"))
);
var controllerTypes = from t in Assembly.GetExecutingAssembly().GetTypes()
where typeof(IController).IsAssignableFrom(t)
select t;
foreach (Type t in controllerTypes)
this.container.AddComponentLifeStyle(t.FullName, t, Castle.Core.LifestyleType.Transient);
}
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType) {
return (IController)this.container.Resolve(controllerType);
}
}
}
pumox
Member
12 Points
7 Posts
Re: Asp.Net MVC 2 - IoC (Castle Windsor)
Feb 08, 2010 09:06 AM|LINK
Here is my working WindsorControllerFactory based on the book:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using Castle.Windsor; using Castle.Windsor.Configuration.Interpreters; using Castle.Core.Resource; using System.Reflection; namespace WebUI { public class WindsorControllerFactory : DefaultControllerFactory { private WindsorContainer container; public WindsorControllerFactory() { this.container = new WindsorContainer( new XmlInterpreter(new ConfigResource("castle")) ); var controllerTypes = from t in Assembly.GetExecutingAssembly().GetTypes() where typeof(IController).IsAssignableFrom(t) select t; foreach (Type t in controllerTypes) this.container.AddComponentLifeStyle(t.FullName, t, Castle.Core.LifestyleType.Transient); } protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType) { return (IController)this.container.Resolve(controllerType); } } }