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。WebApi2StructureMap 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
}