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 () { }
不会创建存储库的新实例。您有两个选择:
将默认构造函数更改为:
public BooksController ()
{
_repository = new BookRepository();
}
使用 DI 容器解析 IBookRepository。 Here 是一个例子
我正在尝试调用存储库方法来获取一些数据,这些数据是从 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 () { }
不会创建存储库的新实例。您有两个选择:
将默认构造函数更改为:
public BooksController () { _repository = new BookRepository(); }
使用 DI 容器解析 IBookRepository。 Here 是一个例子