.Net Core - метод создания ошибки NullReferenceException - PullRequest
0 голосов
/ 15 июня 2019

Есть уже несколько вопросов по этой проблеме, но ни один из них на самом деле не решил мою проблему.

Я пытаюсь создать метод Create объекта Student.cs, но когда я получаю доступ к URL-адресу создания, появляется эта ошибка, я действительно не знаю, как ее решить.

AlumniController.cs

ошибка строки: 32 var teacher = await _contextProf Professor.FindAllAsync ();

Ошибка изображения

enter image description here

код

AlunoController.cs

public class AlunosController : Controller
    {
        public readonly AlunosService _contextAluno;
        public readonly ProfessorService _contextProfessor;
        public readonly TurmasController _contextTurma;

        public AlunosController(AlunosService contextAluno)
        {
            _contextAluno = contextAluno;
        }

        public async Task<IActionResult> Index()
        {
            var lista = await _contextAluno.FindAllAsync();
            return View(lista);
        }

        //GET
        public async Task<IActionResult> Create()
        {
            var professores = await _contextProfessor.FindAllAsync();
            var turmas = await _contextTurma.FindAllAsync();
            var viewModel = new AlunoViewModel {
                Professores = professores,
                Turmas = turmas
            };
            return View(viewModel);
        }
    }

Turma.cs

public class Turma
    {
        public int Id { get; set; }
        public int Numero { get; set; }
        public string Curso { get; set; }
        public ICollection<Aluno> Alunos { get; set; } = new List<Aluno>();

        public Turma()
        {
        }

        public Turma(int id, int numero, string curso)
        {
            Id = id;
            Numero = numero;
            Curso = curso;
        }
    }

Professor.cs

public class Professor
    {
        public int Id { get; set; }
        public string Nome { get; set; }
        public string Email { get; set; }
        public string Telefone { get; set; }
        public ICollection<Aluno> Alunos { get; set; } = new List<Aluno>();

        public Professor()
        {
        }

        public Professor(int id, string nome, string email, string telefone)
        {
            Id = id;
            Nome = nome;
            Email = email;
            Telefone = telefone;
        }
    }

Как я могу решить это?

Код завершен ЗДЕСЬ .

Ответы [ 3 ]

1 голос
/ 15 июня 2019

_contextProfessor - ноль.Вам нужно будет установить его в конструкторе AlunosController.

public AlunosController(AlunosService contextAluno, ProfessorService professorService)
{
    _contextAluno = contextAluno;
    _contextProfessor = processorService;
}
1 голос
/ 15 июня 2019

Очевидно, что вы не присвоили объекты полям _contextProfessor и _contextTurma, поэтому вы, естественно, получите NullReferenceException, если попытаетесь обратиться к их методам и свойствам.Итак, во-первых, вам нужно внедрить ProfessorService и TurmasController в конструктор контроллера.

Но чтобы внедрение было успешным, вам нужно указать зависимости в вашем классе запуска метода ConfigureServices, иначе зависимость выиграетне может быть решен, и InvaidOperationException будет брошено.

0 голосов
/ 15 июня 2019

Потому что вы забыли включить эту службу в вызов в конструкторе

    public AlunosController(AlunosService contextAluno, ProfessorService contextProfessor)
                                                       //^^^^
    {
        _contextAluno = contextAluno;
        _contextPrefessor = contextProfessor;
    }

DI немного вас укусил.просто потому, что вы добавляете один контекст в конструктор, не означает, что остальные создаются бесплатно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...