辅助功能:参数类型比方法更难访问

时间:2018-01-15 12:11:25

标签: 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);
    }
}

使用IproductRepository.cs

namespace SportsStore.Models
{
    interface IProductRepository {
        IQueryable<Product> Products { get; }
    }
}

我得到的错误当然是这一个:

Severity    Code    Description Project File    Line    Suppression State
Error   CS0051  Inconsistent accessibility: parameter type 
'IProductRepository' is less accessible than method 
'ProductController.ProductController(IProductRepository)'   SportsStore 

我可以看到问题是我不应该将IproductRepository变量设置为private,然后将ProductController公开。

我读到了这个答案:
Inconsistent Accessibility: Parameter type is less accessible than method 它基本上告诉我该课程需要公开(它已经是),参数需要像&#39;那样可以访问。意思是公开的,对吧?

但是如果我将参数设置为public也是如此:

public IProductRepository repository; 

然后我仍然会收到此错误:

Severity    Code    Description Project File    Line    Suppression State
Error   CS0052  Inconsistent accessibility: field type 'IProductRepository' 
is less accessible than field 'ProductController.repository'    SportsStore 

我该如何解决这个问题?

注意:这是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

2 个答案:

答案 0 :(得分:2)

看起来界面应该是公开的

namespace SportsStore.Models
{
    public interface IProductRepository
    {
        IQueryable<Product> Products { get; }
    }
}

答案 1 :(得分:-2)

我最近遇到了您的错误。公开接口