代码之家  ›  专栏  ›  技术社区  ›  DaveDev

为什么没有执行basecontroller的重载构造函数?

  •  1
  • DaveDev  · 技术社区  · 14 年前

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

    我不知道它是否相关,但这就是我为依赖注入配置结构映射的方式。

    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;
        }
    }
    
    3 回复  |  直到 7 年前
        1
  •  6
  •   Paolo    14 年前

    子类构造函数是否包括对 base ?

    例如

    public MyController(ISiteService siteService) : base(siteService)
    {
        //do some MyController specific stuff
    }
    
        2
  •  0
  •   Wyatt Barnett    14 年前

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

        3
  •  0
  •   Umair Akbar    7 年前

    MVC和API项目的结构图nuget不同。 似乎您只为MVC项目安装了Nuget。

    尝试安装structuremap.webapi2