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)
上面的代码导致语法错误.
如何正确地将服务注入我的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从继承的控制器对基本控制器执行任何操作,请将修改后的访问权限更改private为protected.
| 归档时间: |
|
| 查看次数: |
3295 次 |
| 最近记录: |