Пытаюсь понять контроллер MVC

#c# #asp.net-mvc

#c# #asp.net-mvc

Вопрос:

Я новичок в C #, и когда я открыл контроллер проекта MVC (ASP.NET ), я нашел следующий синтаксис:

 public class CategoriasController : Controller
    {
        private readonly ApplicationDbContext _context;

        public CategoriasController(ApplicationDbContext context)
        {
            _context = context;
        }
  

Извините, что спрашиваю, но что происходит в строке 3?

 private readonly ApplicationDbContext _context;
  

Является _context переменной? Объект? Это то же самое, что сказать _context = new ApplicationDbContext ?

Извините за вопрос, я просмотрел документы Microsoft, но не смог найти никакого ответа.

Комментарии:

1. Погуглить «ASP.NET Внедрение зависимостей ядра»

2. _context является «полем» , иногда также называемым «переменной уровня класса». Вероятно, сейчас самое подходящее время начать с некоторых вводных руководств по C #, чтобы включить языковые конструкции, такие как классы / методы / свойства / и т.д., Прежде чем переходить к MVC framework.

3. А также «частные поля C #» или «переменные частного экземпляра C #». Эта концепция является основной частью C #, не специфичной для MVC.

Ответ №1:

Модель MVC в целом, реализованная на C #, немного интересна, но работает очень хорошо.

Когда выполняется запрос, путь запроса используется механизмом маршрутизации для использования отражения для создания экземпляра класса, способного обрабатывать ответ.

В этом случае, когда используется совпадающее имя метода ActionResult, совпадающее с именем класса CategoriasController, например /Categorias/Fiction, тогда соответствующий класс контроллера будет создан посредством отражения.

После создания экземпляра класса вызывается метод. Во время создания экземпляра класса происходят обычные вещи, которые происходят с любым другим классом. Итак, что вы видите здесь, это доступность члена уровня класса _context . Глядя дальше, вы можете увидеть, что существует конструктор, который также может быть вызван с контекстом. Это известно как инверсия управления и выполняется с помощью контейнера для внедрения зависимостей. Это означает, что во время создания экземпляра из отражения также создается полностью созданный контекст (для запроса к базе данных), который затем передается. В MVC контейнер DI часто определяется в файле global.asax.cs.

После создания экземпляра класса и вызова метода-члена представление возврата по существу создает средство записи строки для записи в поток ответов, и работа MVC выполнена.

Ответ №2:

Это гарантирует, что переменная уровня класса _context может быть установлена только в конструкторе и не может быть изменена иным образом. В контексте доступа к базе данных, как здесь, вы не хотите, чтобы методы класса могли изменять это, только использовать.

Документация на c # для readonly here гласит: «В объявлении поля только для чтения указывает, что присвоение полю может происходить только как часть объявления или в конструкторе того же класса».