0

我在使用 pro asp.net mvc 3 框架书时遇到问题。在第 175 页上创建产品存储库。

我有错误:错误 1 ​​'SportsStore.Domain.Concrete.EFProductRepository' 没有实现接口成员 'SportsStore.Domain.Abstract.IProductRepository.Products.set' SportsStore\SportsStore.Domain\Concrete\EFProductRepository.cs 11 18 SportsStore.Domain #

错误 2 命名空间“SportsStore.Domain”\SportsStore.WebUI\Infrastructure\NinjectControllerFactory.cs 11 26 SportsStore.WebUI 中不存在类型或命名空间名称“Concrete”

这是我的存储库:

using System; using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using SportsStore.Domain.Abstract; 
using SportsStore.Domain.Entities; 
//using System.Web;

namespace SportsStore.Domain.Concrete 
{
    public class EFProductRepository : IProductRepository
    {
        private EFDbContext context = new EFDbContext();
        public IQueryable<Product> Products
        {
            get { return context.Products; }
        }
    } 
}

我的产品类是公开的:

namespace SportsStore.Domain.Entities 
{
  public class Product
  {
      public int ProductID { get; set; }
      public string Name { get; set; }
      public string Description { get; set; }
      public decimal Price { get; set; }
      public string Category { get; set; }
  } 
}

我的界面:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using SportsStore.Domain.Entities;

namespace SportsStore.Domain.Abstract 
{
  public interface IProductRepository
  {
      IQueryable<Product> Products { get; set; }
  } 
}

我的 EFDBContext 类:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using SportsStore.Domain.Entities; 
using System.Data.Entity;

namespace SportsStore.Domain.Concrete 
{
  public class EFDbContext : DbContext 
  {
      //DBset<type>   Property name is Products
      public DbSet<Product> Products { get; set; }
  }
}

我的 ninjectcontrollerfactory 类:

using System; using System.Collections.Generic; 
using System.Linq; using System.Web; 
using System.Web.Mvc; 
using System.Web.Routing; 
using Ninject; 
using Moq; 
using SportsStore.Domain.Abstract; 
using SportsStore.Domain.Entities; 
using SportsStore.Domain.Concrete;

namespace SportsStore.WebUI.Infrastructure 
{
    public class NinjectControllerFactory : DefaultControllerFactory 
    {
        private IKernel ninjectKernel;

        public NinjectControllerFactory()
        {
            ninjectKernel = new StandardKernel();
            AddBindings();
        }

        protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
        {
            return controllerType == null ? null : (IController)ninjectKernel.Get(controllerType);
        }

        private void AddBindings()
        {
            //P163 - Add a mock implementation of the IProductRepository Interface
            //Mock<IProductRepository> _mock = new Mock<IProductRepository>();
            //_mock.Setup(m => m.Products).Returns(new List<Product> 
            //{
            //    new Product {Name = "Football",Price = 25},
            //    new Product {Name = "Surf Board",Price = 179},
            //    new Product {Name = "Running Shoes",Price = 95},

            //}.AsQueryable());
            //_ninjectKernel.Bind<IProductRepository>().ToConstant(_mock.Object);


            ninjectKernel.Bind<IProductRepository>().To<EFProductRepository>();    //P176 Bind to our Live repository

        }

    } 
}

有 3 个项目有参考:SportsStore.Domain SportsStore.UnitTests = ref to Moq, Ninject,SportsStore.Domain, SportsStore.WebUI SportsStore.WebUI = ref to Ninject,SportsStore.Domiain

我有搜索谷歌,它说将 SportsStore.Domain 项目的引用添加到 WebUI 项目但是当我这样做时它说它不能,因为它会导致循环依赖。

上面的错误 1 ​​和错误 2,我不明白,因为接口已实现,并且命名空间位于 NinjectControllerFactory 中,我将 IProductRepository 绑定到接口 EFProductRepository

谢谢

4

1 回答 1

2

把“集合”从

public interface IProductRepository 
{ 
    IQueryable<Product> Products { get; set; } 
}  

它应该可以解决您的问题

于 2012-09-09T20:04:08.397 回答