gpt4 book ai didi

c# - 为什么 BaseController 的重载构造函数没有被执行?

转载 作者:太空宇宙 更新时间:2023-11-03 19:33:49 26 4
gpt4 key购买 nike

我有一个定义如下的基本 Controller ,但是采用 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 的 Controller 都有构造函数,这些构造函数采用 StructureMap 提供的各种参数,并且所有这些构造函数都会被执行。

我不知道它是否相关,但这就是我为依赖项注入(inject)配置 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;
}
}

最佳答案

您的子类构造函数是否包含对 base 的调用?

例如

public MyController(ISiteService siteService) : base(siteService)
{
//do some MyController specific stuff
}

关于c# - 为什么 BaseController 的重载构造函数没有被执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3212237/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com