[英]Ninject cannot find and bind to the repository correctly
这太令人沮丧了,使我无法继续阅读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));
}
如果不这样做,我将收到ProductsController
的无parameter-less constructor error
如果您想看一看,这里就是整个过程: https : //github.com/babakinks/MVCExample
Ninject在这段代码中的任务是找到IProductsRepository
的实例,并使用该存储库创建一个新的ProductController
实例。
NinjectDependencyResolver
包含kernel.Bind<IProductsRepository>().To<EFProductRepository>();
。 因此,您已将服务接口绑定到实体框架实现。 ProductController
依赖于IProductsRepository
实例。 没有存储库,它就不会创建一个。 ActivationException
。 我假设您没有收到此错误。 null
(默认情况下不建议这样做,并且不建议这样做),则您将在List
方法中获得NullReferenceException
,我假设您也没有。 我下载了您的项目,并在App_Data的mdf数据库文件中的产品表中添加了一些项目,该项目立即生效。 您在那边有调试问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.