Web Api 使用存储库返回 NullReferenceException

Web Api returning NullReferenceException using repository

我正在尝试调用存储库方法来获取一些数据,这些数据是从 Web Api 'Get' 请求返回的。

public class BookRepository : IBookRepository
{
    public Book GetBookInfo()
    {
        return new Book
        {
            Title = "Book1",
            Chapters = new List<string>
                  {
                      "Chapter1",
                      "Chapter2",
                      "Chapter3",
                      "Chapter4"
                  }
        };

我的 apicontroller:

public class BooksController : ApiController
{
    private readonly IBookRepository _repository;

    public BooksController () { }

    public BooksController (IBookRepository repository)
    {
        this._repository = repository;
    }

    // GET api/books
    public Book Get()
    {
        return _repository.GetBookInfo();
    }

问题是当我在浏览器中导航到这个时,例如'http://localhost:49852/api/books' 我收到 NullReferenceException。请您解释一下为什么以及如何纠正?

我认为您的构造函数注入连接不正确。 你能告诉我们你设置 HttpConfiguration.DependencyResolver 的代码吗?假设您没有正确连接它,当 Controller 被实例化时,默认的 Constructor 被调用,因此 _repository 为 null。

要对此进行测试,请更改默认构造函数以创建 BookRepository 的实例。即

public BookController()
{
    _repository = new BookRepository();
}

你很可能没有实例化你的存储库,你的默认构造函数

public BooksController () { }

不会创建存储库的新实例。您有两个选择:

  1. 将默认构造函数更改为:

    public BooksController () 
    {
        _repository = new BookRepository();
    }
    
  2. 使用 DI 容器解析 IBookRepository。 Here 是一个例子