我已經在MVC3應用程序中成功實現了Ninject,但是在使用ASP.NET Web窗體執行同樣的操作時遇到了一些麻煩。每次嘗試訪問業務層中的注入屬性時,我都會收到空引用。在CreateKernel方法中設置斷點以及ServiceLocator類中的幾個位置之後,看起來它們都沒有被擊中,所以它甚至沒有被加載。Ninject + ASP.NET Web窗體無法正常工作
我敢肯定,我只是接近這個錯誤,但是很少有文檔或信息用於在Web窗體應用程序中連接Ninject。
基本上這裏是我到目前爲止有:
代碼背後
public class ReviewManager
{
[Inject] private IReviewRepository _reviewRepository { get; set; }
public ReviewManager() { }
public ReviewManager(IReviewRepository reviewRepository)
{
_reviewRepository = reviewRepository;
}
public Review GetById(int id)
{
if (id <= 0) throw new ArgumentException("ID must be greater than zero");
**I get a null reference exception on the next line. _reviewRepository is null**
return _reviewRepository.GetById(id);
}
}
的global.asax.cs
public class Global : NinjectHttpApplication
{
protected override IKernel CreateKernel()
{
return ServiceLocator.Kernel;
}
// deleted for brevity
}
ServiceLocator.cs(編輯爲簡潔,相關部分在這裏)
這裏的關鍵問題是:誰的實例化ReviewManager? – Jeff
它從任何ASP.NET代碼隱藏實例化。 – Scott
使用您的ServiceLocator或通過創建新的ReviewManager? – Jeff