这个问题已经回答了几次,但我仍然无法让我的代码工作。我有一个非常简单的类,如下所示:
namespace SportsStore.Controllers {
public class ProductController : Controller {
private IProductRepository repository;
public ProductController(IProductRepository repo) {
repository = repo;
}
public ViewResult List() => View(repository.Products);
}
}
Run Code Online (Sandbox Code Playgroud)
使用 IproductRepository.cs
namespace SportsStore.Models
{
interface IProductRepository {
IQueryable<Product> Products { get; }
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误当然是这个:
Severity Code Description Project File Line Suppression State
Error CS0051 Inconsistent accessibility: parameter type
'IProductRepository' is less accessible than method
'ProductController.ProductController(IProductRepository)' SportsStore
Run Code Online (Sandbox Code Playgroud)
我可以看到问题是我不应该将 IproductRepository 变量设置为私有,然后将 ProductController 设为公开。
我读了这个答案:
不一致的可访问性:参数类型比方法更难访问
,它基本上告诉我该类需要是公共的(它已经是)并且参数需要“与方法一样可访问”。意思是公开,对吧?
但是,如果我也将参数设置为 public,如下所示:
public IProductRepository repository;
Run Code Online (Sandbox Code Playgroud)
然后我仍然收到此错误:
Severity Code Description Project File Line Suppression State
Error CS0052 Inconsistent accessibility: field type 'IProductRepository'
is less accessible than field 'ProductController.repository' SportsStore
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
注意:这是 Adam Freeman 所著的 Asp Net Core 一书中的一个示例,该项目的 github 可在此链接中找到,其中代码如我上面所述,因此他们没有对其进行更正。看起来它应该工作。如果这有什么不同,我正在运行 Visual Studio 2017。
Jos*_*ams 17
界面应该是这样的 public
namespace SportsStore.Models
{
public interface IProductRepository
{
IQueryable<Product> Products { get; }
}
}
Run Code Online (Sandbox Code Playgroud)
这同样适用于您传递给构造函数的类。