#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 гласит: «В объявлении поля только для чтения указывает, что присвоение полю может происходить только как часть объявления или в конструкторе того же класса».