这是令人沮丧的,并且阻止我继续阅读ASP.NET MVC
,因为剩下的主题正在建立在这一篇:我正在关注Adam Freeman's book Pro ASP.NET MVC 5.0
本书,我相信你们中的许多人也研究过它。所以我完成了第7章,这不起作用。我可以调出网站,但页面右侧没有显示任何产品。
据我所知,这是我发现的:
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 error
ProductsController
如果你想看看,这就是整个事情: https://github.com/babakinks/MVCExample
答案 0 :(得分:1)
Ninject在这段代码中的任务是找到IProductsRepository
的实例,并使用此存储库创建一个新的ProductController
实例。
NinjectDependencyResolver
包含kernel.Bind<IProductsRepository>().To<EFProductRepository>();
。因此,您已将服务接口绑定到实体框架实现。ProductController
取决于IProductsRepository
个实例。如果没有存储库,它将不会创建一个。ActivationException
。我假设你没有收到这个错误。null
(默认情况下不会这样做而且不推荐使用),您会在NullReferenceException
方法中获得List
,我认为您不会得不到。我下载了你的项目,在app_Data的mdf数据库文件中的products表中添加了一些项目,它立即生效了。那边有调试问题。