2013-06-25 2 views
1

Это пример в книге pro asp .net, но я не могу понять, что происходит не так. Я прочитал много сообщений с теми же вопросами, но это не решает мою проблему.Класс asp.net класса asp.net недоступен из-за его уровня защиты

ошибка говорит о том, что IProductRepository недоступен из-за его защиты, но я ничего не делал частным. Я не получаю это

это мой класс продукта

namespace SportStore.Domain.Entities 
{ 
    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; } 
    } 
} 

метод addbiding для Ninject

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() 
     { 
      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); 


     } 
    } 
} 

интерфейс

namespace SportStore.Domain.Abstract 
{ 
    interface IProductRepository 
    { 
     IQueryable<Product> Products { get; } 
    } 
} 
+0

Я думаю, что уровень защиты по умолчанию - 'private', если не указано иное. Поскольку эти два типа находятся в разных пространствах имен, попробуйте настроить интерфейс на «public» (или, возможно, «внутренний», если они находятся в одной сборке). – David

ответ

2

По умолчанию, классы и интерфейсы являются внутренними для сборки , Поскольку вы, вероятно, работаете с несколькими ассемблерами, установите интерфейс для публики, и вам должно быть хорошо идти.

Смежные вопросы