可访问性:参数类型的可访问性不如方法

Min*_*nie 3 c# asp.net

这个问题已经回答了几次,但我仍然无法让我的代码工作。我有一个非常简单的类,如下所示:

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。

https://github.com/Apress/pro-asp.net-core-mvc-2/blob/master/08%20-%20SportsStore/SportsStore/SportsStore/Controllers/ProductController.cs

Jos*_*ams 17

界面应该是这样的 public

namespace SportsStore.Models
{
    public interface IProductRepository
    {
        IQueryable<Product> Products { get; }
    }
}
Run Code Online (Sandbox Code Playgroud)

这同样适用于您传递给构造函数的类。