Почему DbContext (ASP.NET) является пустым в MyService? - PullRequest
0 голосов
/ 28 ноября 2018

Я использую c #, ASP.NET Core, EF.

У меня есть Startup.cs:

public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<AppDbContext>(options =>
                options.UseSqlServer(
                    Configuration.GetConnectionString("DefaultConnection")));
            ...
        }

У меня есть контроллер:

public class HomeController : Controller
{
        public AppDbContext _db;

        public HomeController(AppDbContext db)
        {
            _db = db;
        }

        public IActionResult Index()
        {
         // _db is NOT NULL           
         var d = _db.Users.FirstOrDefault();
        }
}

У меня естьКласс MyService.cs:

public class MyService
{
        public static AppDbContext _db;

        public MyService(AppDbContext db)
        {
            _db = db;
        }

        public static void GetOtherValue()
        {   
             // _db is NULL           
             var d = _db.Users.FirstOrDefault();
        }
  }

HomeController работает правильно: _db не равно нулю.

Почему переменная _db равна нулю в MyService.cs ?Как это исправить?

UP:

public class OtherController : Controller
{
    ....
    MyService.GetOtherValue();
    ....
}

1 Ответ

0 голосов
/ 28 ноября 2018

Вы никуда не вводите свой сервис.

Вы просто используете статический метод, поэтому конструктор никогда не вызывается.Вы можете выполнить инъекцию через конструктор.

Сначала добавьте сервис в контейнер ASP.Net Core:

services.AddScoped<MyService, MyService>();

Затем введите через конструктор в вашем классе контроллера:

public class HomeController : Controller
{
    private readonly MyService _myService;

    public HomeController (MyService myService)
    {
        _myService = myService;
    }
}

MyService класс будет создаваться при каждом запросе (AddScoped()).Тогда ваш DbContext будет создан автоматически.

Подробнее о DI в .NET Core

...