将服务注入基本控制器类

one*_*mer 4 c# dependency-injection controller initialization asp.net-mvc-3

场景:

一个MVC3应用程序,它使用构造函数注入为给定控制器提供服务:

public class HomeController : BaseController
{
    private readonly IArticleService _articleService;

    public HomeController(IArticleService articleService)
    {
        _articleService = articleService;
    }

    public ActionResult Index()
    {
        // do stuff with services
        return View()
    }
}
Run Code Online (Sandbox Code Playgroud)

意向:

我有一个UserService从Active Directory获取用户主体数据,我想从所有控制器,从基本控制器获取.

我试过把这个服务注入我BaseController这样的:

public class BaseController : Controller
{
    private readonly IUserService _userService;

    public BaseController(IUserService userService)
    {
        _userService = userService;
    }
}
Run Code Online (Sandbox Code Playgroud)

所有它本身看起来很好,但现在我的构造函数HomeController是关闭的,因为它需要一个: base()初始化程序.问题是,由于UserService注入,基本初始化器不是无参数的.

public HomeController(IArticleService articleService) : base(IUserService userService)
Run Code Online (Sandbox Code Playgroud)

上面的代码导致语法错误.

问题(S):

如何正确地将服务注入我的BaseController并从子控制器类(例如HomeController)初始化它?

Era*_*nga 12

除了基本初始化程序参数之外,用户服务接口必须包含在子控制器的构造函数参数中.像这样:

public class HomeController : BaseController
{
    private readonly IArticleService _articleService;

    public HomeController(IArticleService articleService, IUserService userService) : base(userService)
    {
        _articleService = articleService;
    }

    public ActionResult Index()
    {
        // do stuff with services
        return View()
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:为了UserService从继承的控制器对基本控制器执行任何操作,请将修改后的访问权限更改privateprotected.