2014-12-04 53 views
0

這太令人沮喪了,並阻止我繼續閱讀ASP.NET MVC,因爲其餘的主題都建立在這一個之上:我遵循Adam Freeman's book Pro ASP.NET MVC 5.0這本書,我相信你們中的許多人也研究過它。所以我已經完成了第7章,這是行不通的。我可以調出該網站,但頁面右側沒有顯示任何產品。Ninject無法找到並正確綁定到存儲庫

至於我可以在這裏調試是我發現: ProductController沒有返回的產品,這點我覺得是因爲Ninject工作不正常 https://github.com/babakinks/MVCExample/blob/master/SportsStore/SportsStore.WebUI/Controllers/ProductController.cs

public class ProductController : Controller 

{ 
    private IProductsRepository repository; 
    public int PageSize = 4; 

    public ProductController(IProductsRepository productRepository) 
    { 
     this.repository = productRepository; 
    } 

    public ViewResult List(int page = 1) 
    { 
     ProductsListViewModel model = new ProductsListViewModel 
     { 
      Products = repository.Products 
      .OrderBy(p => p.ProductID) 
      .Skip((page - 1) * PageSize) 
      .Take(PageSize), 
      PagingInfo = new PagingInfo 
      { 
       CurrentPage = page, 
       ItemsPerPage = PageSize, 
       TotalItems = repository.Products.Count() 
      } 
     }; 
     return View(model); 
    } 
} 

而且我不認爲這是因爲我的數據庫中沒有足夠的數據,因爲我可以查詢它們。

只有一點:我不得不在Global.asax.cs

private void RegisterDependencyResolver() 
    { 
     var kernel = new StandardKernel(); 

     // you may need to configure your container here? 
     //RegisterServices(kernel); 

     DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel)); 
    } 

添加此方法如果我不這樣做,我會得到一個parameter-less constructor errorProductsController

如果你想看看,這裏是整個事情: https://github.com/babakinks/MVCExample

回答

1

Ninject在這段代碼中的任務是找到IProductsRepository和cr的實例在此存儲庫中使用新的ProductController實例。

  1. 您的NinjectDependencyResolver包含kernel.Bind<IProductsRepository>().To<EFProductRepository>();。所以你已經將服務接口綁定到實體框架實現。
  2. 您的ProductController依賴於IProductsRepository實例。它不會創建一個沒有存儲庫的人。
  3. 如果Ninject以某種方式無法解析存儲庫實例,則會得到一個ActivationException,其中包含詳細的錯誤信息。我假設你沒有得到這個錯誤。
  4. 如果Ninject將注入null(默認情況下,它不和不推薦),你會在你的List方法,我以爲你沒有得到任何獲得NullReferenceException
  5. 顯然,一切都按預期工作,Ninject正在注入一個存儲庫實例。跳過並採取也看起來不錯。

我下載了你的項目,在App_Data的mdf數據庫文件的產品表中添加了一些項目,並且它立即生效。你在那邊有一個調試問題。

+0

非常感謝您花時間測試應用程序。您能否詳細解釋一下這個問題:「您那邊有一個調試問題。」 – Bohn 2014-12-09 20:47:30

+1

@Blake:好吧,我克隆了你的git項目,建立了它,在數據庫中放入了一些行,它工作。你確定你有數據嗎?請記住,ASP.net正在使用App_Data文件夾中的文件。 – Frank 2014-12-09 20:55:02