Dav*_*Dev 1 c# structuremap asp.net-mvc constructor 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的所有控制器都具有构造函数,这些构造函数接受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;
    }
}
您的子类构造函数是否包含对base?的调用?
例如
public MyController(ISiteService siteService) : base(siteService)
{
    //do some MyController specific stuff
}
| 归档时间: | 
 | 
| 查看次数: | 958 次 | 
| 最近记录: |