C# 为什么BaseController';s重载构造函数没有被执行?

C# 为什么BaseController';s重载构造函数没有被执行?,c#,asp.net-mvc,constructor,controller,structuremap,C#,Asp.net Mvc,Constructor,Controller,Structuremap,我有一个基本控制器,其定义如下,但接受ISiteService的构造函数永远不会执行: public class BaseController : Controller { private ISiteService _siteService; public BaseController() {} public BaseController(ISiteService siteService) { _siteService = siteServic

我有一个基本控制器,其定义如下,但接受
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>();
}

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

e、 g


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

e、 g


如果您已经通过structuremap加载控制器,为什么不删除无参数构造函数呢?你不再需要它了,它可能会在某些地方混淆某些东西

如果您已经通过structuremap加载控制器,为什么不删除无参数构造函数呢?你不再需要它了,它可能会在某些地方混淆某些东西

结构映射NuGet对于MVC和API项目是不同的。 似乎您只为MVC项目安装了NuGet


尝试安装StructureMap。WebApi2

StructureMap NuGet对于MVC和API项目是不同的。 似乎您只为MVC项目安装了NuGet


尝试安装StructureMap.WebApi2

显示此BaseController的调用方代码。您如何知道基类构造函数从未被命中?什么是连锁反应?这不是一个真正的答案,但是你需要默认的构造函数吗?如果没有,StructureMap可能会调用剩下的一个。没错,如果没有默认构造函数,StructureMap会调用另一个。但是,如果我删除该构造函数,那么NHibernate开始抱怨
类型应该有一个可见的(公共的或受保护的)无参数构造函数
向我们显示此BaseController的调用方代码。您如何知道基类构造函数从未被命中?什么是连锁反应?这不是一个真正的答案,但是你需要默认的构造函数吗?如果没有,StructureMap可能会调用剩下的一个。没错,如果没有默认构造函数,StructureMap会调用另一个。但是,如果我删除该构造函数,则NHibernate开始抱怨
类型应该有一个可见的(公共的或受保护的)无参数构造函数
public class GroupController : BaseController
{

    private readonly IGroupService _groupService;

    private readonly ISiteService _siteService;

    public GroupController() {}

    public GroupController(
        ISiteService siteService
        ): base(siteService)
    {
        _siteService = siteService;
    }
}
public MyController(ISiteService siteService) : base(siteService)
{
    //do some MyController specific stuff
}