Исключение нулевой ссылки времени выполнения, использующее SimpleInjector в контроллере WebApi - PullRequest
0 голосов
/ 19 ноября 2018

В моем проекте MVC у меня есть контроллер API, для которого я хочу использовать внедрение зависимостей. Я использую Simple Injector для внедрения зависимостей.

Вот мой контроллер API:

public class MedicInfoesApiController : ApiController
{
    private readonly IDiContext _dbContext;

    public MedicInfoesApiController() { }

    public MedicInfoesApiController(IDiContext diContext)
    {
        _dbContext = diContext;
    }

    // POST: api/MedicInfoesApi
    [ResponseType(typeof(MedicInfo))]
    public IHttpActionResult PostMedicInfo(MedicInfo medicInfo)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        // Create empty Employee Object to get info of person being submitted via IBM
        Employee emp = new Employee();

        //check if IBM that user is submitting exists
        if (!EmployeeData.IsValidIBM(medicInfo.MedicIbm))
        {
            ModelState.AddModelError("", "This IBM does not exist!");
        }
        // Check if any existing IBM's match what the user is trying to submit... if none then save to database
        else if (_dbContext.GainAccess().MedicInfoes.Any(x => x.MedicIbm.Equals(medicInfo.MedicIbm, StringComparison.CurrentCultureIgnoreCase)))
        {
            ModelState.AddModelError("", "This person already exists!");
        }

        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }
        else
        {
            // Set empty Employee object with Data of person
            emp = EmployeeData.GetEmployee(medicInfo.MedicIbm);
            medicInfo.Active = true;
            _dbContext.GainAccess().MedicInfoes.Add(medicInfo);

            _dbContext.GainAccess().SaveChanges();
        }

При отладке в операторе else if возникает ошибка времени выполнения:

x.MedicIbm = ошибка CS0103: имя 'x' не существует в текущем контексте

и

_dbContext = нуль

Может ли внедрение зависимостей использоваться с контроллерами API? Я предполагал, что они могли бы?

Любое объяснение или помощь в отношении того, почему это происходит, очень ценится.

1 Ответ

0 голосов
/ 19 ноября 2018

Вызывается конструктор по умолчанию, поэтому контекст не внедряется. Следовательно, null

Удалите конструктор по умолчанию из ApiController и оставьте следующее

public MedicInfoesApiController(IDiContext diContext) {
    _dbContext = diContext;
}

также убедитесь, что IDiContext правильно зарегистрирован в контейнере DI

Справочник Руководство по интеграции ASP.NET Web API для простого инжектора

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