私はプロasp.netmvc3フレームワークブックに問題があります。175ページ製品リポジトリの作成。
エラーが発生しました:エラー1'SportsStore.Domain.Concrete.EFProductRepository'はインターフェイスメンバー'SportsStore.Domain.Abstract.IProductRepository.Products.set' SportsStore \ SportsStore.Domain \ Concrete \ EFProductRepository.cs 11 18 SportsStore.Domain#を実装していません
エラー2タイプまたは名前空間の名前「Concrete」が名前空間「SportsStore.Domain」に存在しません\SportsStore.WebUI\ Infrastructure \ NinjectControllerFactory.cs 11 26 SportsStore.WebUI
これは私のリポジトリです:
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
Googleを検索すると、SportsStore.Domainプロジェクトの参照をWebUIプロジェクトに追加すると表示されますが、これを実行すると、循環依存が発生するため、できないと表示されます。
上記のエラー1とエラー2は、インターフェイスが実装されており、名前空間がNinjectControllerFactoryにあり、IProductRepositoryをインターフェイスEFProductRepositoryにバインドしているためわかりません。
ありがとう