J'ai un contrôleur de base qui est défini comme suit, mais le constructeur qui prend la ISiteService
n'est exécuté:Pourquoi le constructeur surchargé de BaseController n'est-il pas exécuté?
public class BaseController : Controller
{
private ISiteService _siteService;
public BaseController() {}
public BaseController(ISiteService siteService)
{
_siteService = siteService; // this never gets hit..
}
protected override void Initialize(RequestContext rc)
{
string host = ((rc.HttpContext).Request).Url.Host;
Site site = _siteService.GetSiteByHost(host); // so _siteService is null...
base.Initialize(rc);
}
}
quelqu'un peut me dire pourquoi ce serait le cas? Que dois-je faire pour que ce constructeur s'exécute?
Tous les contrôleurs qui implémentent BaseController ont des constructeurs qui prennent différents paramètres fournis par StructureMap, et tous ces constructeurs sont exécutés.
Je ne sais pas si c'est pertinent mais c'est ainsi que je configure StructureMap pour mon injection de dépendance.
private void ConfigureNonOptionalDependencies()
{
// all other dependencies are registered same as this,
// and the constructors all get hit
ForRequestedType<ISiteService>()
.TheDefaultIsConcreteType<SiteService>();
}
Je suis pas familier avec StructureMap, donc je ne sais pas si elle n'a rien à voir avec cette question, ou si elle est plus d'un problème MVC. Ou est-ce même possible pour cela? Merci
modifier:
aussi, je l'ai essayé ceci:
public class GroupController : BaseController
{
private readonly IGroupService _groupService;
private readonly ISiteService _siteService;
public GroupController() {}
public GroupController(
ISiteService siteService
): base(siteService)
{
_siteService = siteService;
}
}
Montrez-nous le code appelant de ce BaseController. –
Comment savez-vous que le constructeur de la classe de base n'est jamais touché? Quel est l'effet d'entraînement? – Paolo
Ce n'est pas vraiment une réponse, mais avez-vous besoin du constructeur par défaut? Si vous n'aviez pas cela, on peut supposer que StructureMap appelait le restant. –