Configurando a Inversão de controle (IoC) no ASP.NET MVC com Castle Windsor
Estou examinando o Pro ASP.NET MVC Framework de Sanderson e no capítulo 4 ele discuteCriando uma fábrica de controladores personalizados e parece que o método original,AddComponentLifeStyle
ouAddComponentWithLifeStyle
, usado para registrar controladores está obsoleto agora:
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);
}
}
A nova sugestão é usarRegister(Component.For<I>().ImplementedBy<T>().Named(key).Lifestyle.Is(lifestyle))
, mas não consigo descobrir como apresentar o tipo de controlador de implementação noImplementedBy<???>()
método. eu tenteiImplementedBy<t>()
eImplementedBy<typeof(t)>()
, mas não consigo encontrar a maneira apropriada de transmitir o tipo de implementação. Alguma ideia?