Почему перегруженный конструктор BaseController не выполняется? - PullRequest
1 голос
/ 09 июля 2010

У меня есть базовый контроллер, который определяется следующим образом, но конструктор, который принимает 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;
    }
}

Ответы [ 3 ]

6 голосов
/ 09 июля 2010

Включают ли ваши конструкторы подкласса вызов base?

, например

public MyController(ISiteService siteService) : base(siteService)
{
    //do some MyController specific stuff
}
0 голосов
/ 11 декабря 2017

Структура карты NuGet отличается для проектов MVC и API.Похоже, вы установили NuGet только для проекта MVC.

Попробуйте установить StructureMap.WebApi2

0 голосов
/ 09 июля 2010

Если вы уже загружаете контроллеры через структурную карту, почему бы просто не исключить конструктор без параметров?Вам это больше не нужно, и это, вероятно, что-то сбивает с толку.,.

...