Поскольку DI ядра asp.net обеспечивает только инжекцию в конструктор и метод.
Если есть много услуг для инъекций.
Вместо того, чтобы много писать внутри конструктора и часто менять конструкторы.
Могу ли я просто использовать какого-либо провайдера, чтобы я мог получать услуги везде внутри контроллера?
Вместо:
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, и упрощать все конструкторы контроллера.