Skip to main content
 首页 » 编程设计

c#之WebApi Controller 中使用 SimpleInjector 的运行时空引用异常

2024年02月25日39zdz8207

在我的 MVC 项目中,我有一个 API Controller ,我想对其使用依赖注入(inject)。我正在使用 Simple Injector用于依赖注入(inject)。

这是我的 api Controller :

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=error CS0103: The name 'x' does not exist in the current context

和

_dbContext=null

依赖注入(inject)可以与 api Controller 一起使用吗?我以为他们可以?

非常感谢任何关于为什么会发生这种情况的解释或帮助。

请您参考如下方法:

正在调用默认构造函数,因此未注入(inject)上下文。因此 null

从 ApiController 中移除默认构造函数并保留以下内容

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

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

引用 ASP.NET Web API Integration Guide for Simple Injector