0

私はプロ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にバインドしているためわかりません。

ありがとう

4

1 に答える 1

2

Take the 'set' away from

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

and it should solve your problem

于 2012-09-09T20:04:08.397 に答える