У меня есть базовый контроллер, который выходит из Controller, класс работает нормально, но я подумал, что я часто использую код для получения текущего пользователя из базы данных.Поэтому я решил, что должен создать конструктор и переместить код, который я использую в каждой функции.По сути, я хотел подготовить параметры для любого из методов в моем контроллере.
Итак, это то, что у меня есть сейчас (и работает нормально):
public class UsersController : Controller
{
private DBContext db = new DBContext();
public ActionResult Info()
{
User user = db.Users.Where(m => m.username.Equals(User.Identity.Name)).FirstOrDefault();
return View(user);
}
public ActionResult Edit(int? id){
User user = db.Users.Where(m => m.username.Equals(User.Identity.Name)).FirstOrDefault();
if(user.id == id){
return View(user);
}
}
}
Но моя идея состояла в том, чтобы создать что-то вроде этого:
public class UsersController : Controller
{
private DBContext db = new DBContext();
private User _user;
public UsersController()
{
_user = db.Users.Where(m => m.username.Equals(User.Identity.Name)).FirstOrDefault();
}
public ActionResult Info()
{
return View(_user);
}
public ActionResult Edit(int? id){
if(_user.id == id){
return View(_user);
}
}
}
Когда я внес эти изменения, я получаю следующую ошибку:
Ошибка сервера в '/'Приложение. Ссылка на объект не установлена для экземпляра объекта.
Описание: во время выполнения текущего веб-запроса произошло необработанное исключение.Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.
Сведения об исключении: System.NullReferenceException: ссылка на объект не установлена на экземпляр объекта.
Я попытался отладить и обнаружил, что проблема заключается в том, что мой User
- это null
, когда вызывается конструктор, поэтому я предполагаю, что некоторые другие языки могут вызывать родительский конструктор перед добавлением или после добавления собственной настройки, например что-то вроде этого:
public function __Construct($x){
$this->x = $x
parent::__construct();
}
или
public function __Construct($x){
parent::__construct();
$this->x = $x
}
Я пытался сделать то же самое в своей программе, используя base
, но ничего не работает, и это всегда приводит меня кошибка какой-то другой природы.Я даже не уверен, что это правильный способ сделать это, потому что все, что мне нужно, это создать мой User
(Identity) в конструкторе