У меня есть базовый контроллер, который определяется следующим образом, но конструктор, который принимает ISiteService
, никогда не выполняется:
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);
}
}
Может кто-нибудь сказать мне, почему это так? Что мне нужно сделать, чтобы запустить этот конструктор?
Все контроллеры, которые реализуют BaseController, имеют конструкторы, которые принимают различные параметры, предоставленные StructureMap, и все эти конструкторы выполняются.
Я не знаю, имеет ли это отношение, но именно так я настраиваю StructureMap для своего внедрения зависимости.
private void ConfigureNonOptionalDependencies()
{
// all other dependencies are registered same as this,
// and the constructors all get hit
ForRequestedType<ISiteService>()
.TheDefaultIsConcreteType<SiteService>();
}
Я незнаком с StructureMap, поэтому не знаю, имеет ли он какое-либо отношение к этой проблеме, или это скорее проблема MVC. Или это вообще возможно для этого? Спасибо
редактирование:
также, я пробовал это:
public class GroupController : BaseController
{
private readonly IGroupService _groupService;
private readonly ISiteService _siteService;
public GroupController() {}
public GroupController(
ISiteService siteService
): base(siteService)
{
_siteService = siteService;
}
}