繁体   English   中英

WebApi控制器中使用SimpleInjector的运行时空引用异常

[英]Runtime Null Reference Exception Using SimpleInjector in WebApi Controller

在我的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 = NULL

可以将依赖注入与api控制器一起使用吗? 我以为他们可以吗?

任何有关为何发生这种情况的解释或帮助都非常感谢。

正在调用默认构造函数,因此不会注入上下文。 因此无效

ApiController删除默认构造ApiController并保持跟随

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

还要确保IDiContext已正确注册到DI容器

参考简单注入器的ASP.NET Web API集成指南

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM