Configurando la Inversión de Control (IoC) en ASP.NET MVC con Castle Windsor
Voy a repasar el Marco Pro ASP.NET MVC de Sanderson y en el Capítulo 4 analizaCreando una fábrica de controladores personalizados y parece que el método original,AddComponentLifeStyle
oAddComponentWithLifeStyle
, utilizado para registrar controladores, ahora está en desuso:
public class WindsorControllerFactory : DefaultControllerFactory
{
IWindsorContainer container;
public WindsorControllerFactory()
{
container = new WindsorContainer(new XmlInterpreter(new ConfigResource("castle")));
// register all the controller types as transient
var controllerTypes = from t in Assembly.GetExecutingAssembly().GetTypes()
where typeof(IController).IsAssignableFrom(t)
select t;
//[Obsolete("Use Register(Component.For<I>().ImplementedBy<T>().Named(key).Lifestyle.Is(lifestyle)) instead.")]
//IWindsorContainer AddComponentLifeStyle<I, T>(string key, LifestyleType lifestyle) where T : class;
foreach (Type t in controllerTypes)
{
container.Register(Component.For<IController>().ImplementedBy<???>().Named(t.FullName).LifeStyle.Is(LifestyleType.Transient));
}
}
// Constructs the controller instance needed to service each request
protected override IController GetControllerInstance(Type controllerType)
{
return (IController)container.Resolve(controllerType);
}
}
La nueva sugerencia es usarRegister(Component.For<I>().ImplementedBy<T>().Named(key).Lifestyle.Is(lifestyle))
, pero no puedo entender cómo presentar el tipo de controlador de implementación en elImplementedBy<???>()
método. Lo intentéImplementedBy<t>()
yImplementedBy<typeof(t)>()
, pero no puedo encontrar la forma adecuada de pasar el tipo de implementación. ¿Algunas ideas