我有如下定义一个基本的控制器,但构造函数的ISiteService
从未得到执行:为什么BaseController的重载构造函数没有被执行?
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;
}
}
向我们显示此BaseController的调用者代码。 – 2010-07-09 11:48:19
你怎么知道基类构造函数永远不会被击中?什么是连锁效应? – Paolo 2010-07-09 11:59:40
这不是一个真正的答案,但是你需要默认的构造函数吗?如果你没有那个,大概StructureMap会调用剩下的一个。 – 2010-07-09 12:46:24