Ich führe DI in meine MS MVC-Anwendung ein und habe Probleme, die Controller aus meiner benutzerdefinierten Controller Factory instanziiert zu bekommen. Es scheint, dass das überschriebene "GetControllerInstance" nicht aufgerufen wird.MVC - Erstellen eines Castle Windsor Controller Factory - Kein parameterloser Konstruktor für dieses Objekt definiert
Kann mir jemand sagen, was ich vermisse?
My-Controller Factory:
public class WindsorControllerFactory : DefaultControllerFactory
{
public WindsorControllerFactory()
{
var controllerTypes = from t in AppDomain.CurrentDomain.GetAssemblies().SelectMany(a => a.GetTypes())
where typeof (IController).IsAssignableFrom(t)
select t;
foreach (Type controllerType in controllerTypes)
{
ApplicationContainer.Container.AddComponentLifeStyle(controllerType.FullName, controllerType,
LifestyleType.Transient);
}
}
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
{
if(controllerType !=null)
{
return (IController) ApplicationContainer.Container.Resolve(controllerType);
}
return base.GetControllerInstance(requestContext, controllerType);
}
}
}
Application_Start:
ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory());
}
Der Controller Factory instanziiert und aber es scheint, dass es nicht verwendet wird, um den Controller zu lösen. Ich habe einen Haltepunkt auf "GetControllerInstance" platziert, aber es wird nie getroffen.
Das Ergebnis ist Kein parameterloser Konstruktor für dieses Objekt definiert. Ausnahme ausgelöst
Update:
ich die GetControllerInstance dazu geändert:
private WindsorContainer _container;
public WindsorControllerFactory(WindsorContainer container)
{
_container = container;
_container.Register(AllTypes.Of<IController>().FromAssembly(
typeof(BaseFactoryController).Assembly).Configure(
c => c.Named(c.Implementation.Name.ToLowerInvariant()).LifeStyle.Transient));
}
Jetzt habe ich null controller ignorieren? Wenn dies nicht kommentiert ist:
//base.GetControllerInstance (requestContext, controllerType);
Es fängt an, meine .js-Dateien als Controller zu behandeln. Welche wirft Httpexception
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
{
if (controllerType == null)
{
return null;
}
//base.GetControllerInstance(requestContext, controllerType);
return (IController) _container.Resolve(controllerType);
}
über die Behandlung von js als Controller, die gleiche Frage, die gleiche Empfehlung wie http://stackoverflow.com/questions/1598421/why-is-castle-windsortry-to-resolve-my-content-and-scripts-folder -as-a-co –