Это пример в книге 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; }
}
}
Я думаю, что уровень защиты по умолчанию - 'private', если не указано иное. Поскольку эти два типа находятся в разных пространствах имен, попробуйте настроить интерфейс на «public» (или, возможно, «внутренний», если они находятся в одной сборке). – David