Actualmente estoy probando Castle Windsor vs. Ninject, y realmente me gusta lo que Windsor tiene para ofrecer, solo estoy teniendo un problema con una inyección de repositorio.Castle windsor controller factory y repository no resuelve
Por lo tanto, aquí está la configuración ... Tengo un ControllersInstaller que tiene este aspecto ...
public class ControllersInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(FindControllers().Configure(ConfigureControllers()));
}
private BasedOnDescriptor FindControllers()
{
return AllTypes.FromThisAssembly()
.BasedOn<IController>()
.If(Component.IsInSameNamespaceAs<HomeController>())
.If(t => t.Name.EndsWith("Controller"));
}
private ConfigureDelegate ConfigureControllers()
{
return c => c.LifeStyle.Transient;
}
}
Un instalador contexto que se parece a esto ...
public class ContextInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(AllTypes.FromThisAssembly()
.Where(t => t.Name == "MyContext"));
}
}
Y un acuerdo de recompra instalador que se parece a ...
public class RepoInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(AllTypes.FromThisAssembly()
.Where(type => type.Name.EndsWith("Repo"))
.WithService.DefaultInterface()
.Configure(c => c.LifeStyle.Singleton));
}
}
Luego, en Global.asax les estoy registrando por ...
private static void BootstrapContainer()
{
var container = new WindsorContainer() // Create a container to hold the dependencies
.Install(
new ContextInstaller(),
new RepoInstaller(),
new ControllersInstaller()
); // Scan this assembly for all IWindsorInstaller
var controllerFactory = new WindsorControllerFactory(container.Kernel); // Create a new instance
ControllerBuilder.Current.SetControllerFactory(controllerFactory); // Use my factory instead of default
}
Mi controlador de casa se ve como ...
public class HomeController : Controller
{
IMyRepo _repo;
public HomeController(MyRepo repo)
{
_repo = repo;
}
Pero por alguna razón, cuando puedo depurar lo consigo ... Algunas dependencias de este componente no se pudo resolver de forma estática. MyProject.Controllers.HomeController está esperando las siguientes dependencias: Servicios: - MyProject.Models.MyRepo que no se ha registrado.
¡Y no puedo entender por qué! Intenté hacer que mi instalador repo se instalara como singleton, e intenté reordenar el proceso de registro para que el repositorio fuera configurado antes que los controladores.
Cuando depuro y pulso la línea de fábrica del controlador en Global.asax, dice que todo excepto HomeController se ha resuelto correctamente.
¿Pensamientos?
En realidad, yo le respondió misma solución :-P Me alegro de que lo encontró en tu propio. ¡Diviértete con Windsor! – Crixo
¡De nada! – Crixo