Witam serdecznie, na wstępie tylko dodam, że w c# stawiam swoje pierwsze kroki, dlatego jeśli w niektórych momentach pomylę jakieś pojęcia bardzo proszę o wyrozumiałość.
Stworzyłem już kilka prostych projektów aplikacji webowych i zawsze ciekawiła mnie jedna rzecz, a dokładnie tworzenie instancji kontakstu bazy danych. Otóż powiedzmy, że mamy taki standardowy kontroler:
public class QuestionsController
{
private readonly QuizContext _context;
public QuestionsController(QuizContext context)
{
_context = context;
}
}
W tym momencie zainicjalizowałem w kontrolerze zmienną _context
więc mogę użyć jej aby uzyskać dostęp do bazy danych:
public ActionResult GetQuestions()
{
return _context.Questions.ToList();
}
I oczywiście wszystko działa poprawnie. W momencie gdy otworzę klasę QuizContext znajduje się tam konstruktor, który przyjmuje jako parametr DbContextOptions<QuizAppContext> options
:
public class QuizContext : DbContext
{
public QuizContext(DbContextOptions<QuizAppContext> options) : base(options)
{
}
}
Totalnie nie mogę zrozumieć, w jaki sposób w ww. kontrolerze udało mnie się stworzyć nową instancję klasy QuizContext
bez podawania w którymś momencie obiektu tego konstruktora. Przecież w momencie, gdyby stworzył instancję QuizContext
w taki sposób:
public class QuestionsController
{
private readonly QuizContext _context = new QuizContext (new DbContextOptions<QuizContext >());
}
Muszę go podać. W przypadku inicjalizowania QuizContext
za pomocą kontruktora, w jaki sposób program tworzy nową instancję tego obiektu, skoro nigdzie nie muszę podawać parametru konstruktora klasy QuizContext
?