Yep, that did the trick (my lack of knowledge driving me bananas). Bit of refactoring to keep to the standards:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Web.Mvc;
using System.Web.Routing;
using Castle.Core;
using Castle.Core.Resource;
using Castle.Windsor;
using Castle.Windsor.Configuration.Interpreters;
namespace MySite.Web.Core
{
public class WindsorControllerFactory : DefaultControllerFactory
{
private readonly WindsorContainer _container;
public WindsorControllerFactory()
{
_container = new WindsorContainer(
new XmlInterpreter(new ConfigResource("castle"))
);
IEnumerable<Type> controllerTypes = from t in Assembly.GetExecutingAssembly().GetTypes()
where typeof (IController).IsAssignableFrom(t)
select t;
foreach (Type t in controllerTypes)
_container.AddComponentWithLifestyle(t.FullName, t, LifestyleType.Transient);
}
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
return (IController) _container.Resolve(controllerType);
}
}
}
krokonoster
Contributor
4291 Points
1352 Posts
Re: Asp.Net MVC 2 - IoC (Castle Windsor)
Feb 08, 2010 12:03 PM|LINK
Yep, that did the trick (my lack of knowledge driving me bananas). Bit of refactoring to keep to the standards:
using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Web.Mvc; using System.Web.Routing; using Castle.Core; using Castle.Core.Resource; using Castle.Windsor; using Castle.Windsor.Configuration.Interpreters; namespace MySite.Web.Core { public class WindsorControllerFactory : DefaultControllerFactory { private readonly WindsorContainer _container; public WindsorControllerFactory() { _container = new WindsorContainer( new XmlInterpreter(new ConfigResource("castle")) ); IEnumerable<Type> controllerTypes = from t in Assembly.GetExecutingAssembly().GetTypes() where typeof (IController).IsAssignableFrom(t) select t; foreach (Type t in controllerTypes) _container.AddComponentWithLifestyle(t.FullName, t, LifestyleType.Transient); } protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) { return (IController) _container.Resolve(controllerType); } } }