我在使用 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
谢谢