【发布时间】:2019-06-07 07:58:15
【问题描述】:
由于 asp.net core DI 只提供构造函数注入和方法注入。 如果有很多服务要注入。 而不是在构造函数中编写很多内容并经常更改构造函数。 我可以只使用某种提供程序,以便我可以在控制器内的任何地方获取服务吗?
而不是:
public class HomeController : BaseController
{
public HomeController(
IEmailService emailService,
ISMSService smsService,
ILogService logService,
IProductRepository _productRepository)
:base(emailService,smsService,logService)
{
}
public IActionResult()
{
_emailService.SendSomething();
}
...
}
public class BaseController : Controller
{
protected readonly IEmailService _emailService;
protected readonly ISMSService _smsService;
protected readonly ILogService _logService;
public BaseController(
IEmailService emailService,
ISMSService smsService,
ILogService logService)
{
_emailService = emailService;
_smsService = smsService;
_logService = logService;
}
}
使用某种提供者,例如:
public class HomeController : BaseController
{
public HomeController(IDIServiceProvider provider)
:base(provider)
{
}
public IActionResult()
{
_provider.GetScopedService<IEmailService>().SendSomething();
}
...
}
public class BaseController : Controller
{
protected readonly IDIServiceProvider _provider;
public BaseController(IDIServiceProvider provider)
{
_provider = provider;
}
}
这样我就不用每次BaseController的构造函数发生变化时都去修改所有控制器的构造函数,简化所有控制器的构造函数。
【问题讨论】:
标签: asp.net-core dependency-injection