Сейчас сделано так
public class UserController : Controller
{
private readonly UserService service;
private ApplicationContext _context;
public UserController(ApplicationContext context)
{
_context = context;
service = new UserService(context);
}
...
Хотел бы что бы было вот так (DI)
public class UserController : Controller
{
private readonly UserService service;
private ApplicationContext _context;
public UserController(ApplicationContext context, UserService service)
{
_context = context;
this.service = service;
}
...
public void ConfigureServices(IServiceCollection services)
{
string connection = "Server=ms-sql-8.in-solve.ru;Database=1gb_city-move;user id=1gb_city-move;password=a4bea42fsg;";
services.AddDbContext<ApplicationContext>(options => options.UseSqlServer(connection));
// проинжектить userService примерно так
services.AddSingleton<UserService, UserService>(); // как-то передать параметр - экземпляр ApplicationContext
Есть ли смысл так делать и правильно ли это? Если да, как мне получить доступ к экземпляру ApplicationContext? В IServiceCollection его не нахожу
Спасибо
UPD
Сейчас сделал так:
public class UserController : Controller
{
private readonly UserService service;
private ApplicationContext _context;
public UserController(ApplicationContext context, UserService uSrv)
{
_context = context;
service = uSrv;
}
...
Но
public UserService(ApplicationContext context)
{
в Startup я не инжектил. Сам контейнер проинжектил UserService контекстом?
Всё так?
Если да, то по аналогии я делаю:
public class AccountController : Controller
{
private ApplicationContext _context;
private readonly UserService userService;
private readonly AuthService authService;
public AccountController(ApplicationContext context, AuthService authService, UserService uSrv)
{
_context = context;
userService = uSrv;
this.authService = authService;
}
и даже если я инжектю
services.AddSingleton<UserService, UserService>();
при запуске получаю ошибку
InvalidOperationException: Cannot consume scoped service 'WebApplication1.Models.ApplicationContext' from singleton 'WebApplication1.BLL.UserService'. Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteValidator.VisitScopeCache(ServiceCallSite scopedCallSite, CallSiteValidatorState state)
и даже если я инжектю
services.AddSingleton<UserService, UserService>();
при запуске получаю ошибку
Незнаю поможет ли но в єтом случае нужно делать так:
services.AddSingleton<UserService>();
Ошибка возникает из-за того, что вы пытаетесь создать singleton сервис,с зависимостью от scoped сервиса, то есть ApplicationContext создается на каждый запрос, а UserService только один раз, соответственно, вам просто нужно зарегистрировать UserService тоже как scoped сервис:
services.AddScoped<UserService>();
В остальном вы все делаете верно, все сервисы сами получат свои зависимости от контейнера.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть веб-форма, на которой 2 текст бокса, в эти текстбоксы заносятся значения, double, их я проверяю, чтобы они были с точностью до двух знаков...
есть программа эмулирующая работу в браузере, для того чтобы зайти на сайт, нужно ввести логин и парольПароль на всех аккаунтах одинаковый,...