繁体   English   中英

Ninject无法正确找到并绑定到存储库

[英]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实例。

  1. 您的NinjectDependencyResolver包含kernel.Bind<IProductsRepository>().To<EFProductRepository>(); 因此,您已将服务接口绑定到实体框架实现。
  2. 您的ProductController依赖于IProductsRepository实例。 没有存储库,它就不会创建一个。
  3. 如果Ninject以某种方式无法解析存储库实例,则您将获得带有异常错误信息的ActivationException 我假设您没有收到此错误。
  4. 如果Ninject将注入null (默认情况下不建议这样做,并且不建议这样做),则您将在List方法中获得NullReferenceException ,我假设您也没有。
  5. 所以很明显,一切都按预期工作,Ninject正在注入一个存储库实例。 略过也看起来不错。

我下载了您的项目,并在App_Data的mdf数据库文件中的产品表中添加了一些项目,该项目立即生效。 您在那边有调试问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM