MVC分层架构下出现可访问性不一致错误,寻求解决办法
解决EFUniversityDAL的可访问性不一致错误
错误根源
这个报错的核心是类型访问权限不匹配:当一个公开(public)的类型,去实现或继承一个访问权限更低的类型(比如internal、private),就会触发这个矛盾。
从你的代码来看,问题肯定出在这些依赖类型上:
IEntityRepository<University>:如果这个接口不是public的,而你的IUniversityDAL是public的,继承它就会冲突EFEntityRepositoryBase<University, CoreDbContext>:要是这个基类不是public的,public的EFUniversityDAL继承它也会报错CoreDbContext:如果这个DbContext类不是public的,作为泛型参数传给public的基类,同样会引发权限问题
解决步骤
检查所有关联类型的访问修饰符
- 确保
IEntityRepository<T>是public接口 - 确保
EFEntityRepositoryBase<TEntity, TContext>是public类 - 确保
CoreDbContext是public类
这些类型的访问级别必须和你的EFUniversityDAL、IUniversityDAL、University保持一致(全是public)。
- 确保
统一访问级别
如果不需要这些类型对外暴露,那就把所有相关类型的访问级别统一改成internal:- 把
IUniversityDAL的public换成internal - 把
EFUniversityDAL的public换成internal - 同时确保
IEntityRepository、EFEntityRepositoryBase、CoreDbContext也都是internal
- 把
修改后的示例代码(统一public)
public partial class University { public int Id { get; set; } public string Name { get; set; } = null!; public string Province { get; set; } = null!; public int NumberOfStudents { get; set; } public string Address { get; set; } = null!; } public interface IEntityRepository<T> where T : class { // 这里写接口的成员方法 } public interface IUniversityDAL : IEntityRepository<University> { } public class EFEntityRepositoryBase<TEntity, TContext> : IEntityRepository<TEntity> where TEntity : class where TContext : DbContext { // 基类的实现逻辑 } public class CoreDbContext : DbContext { // DbContext的配置代码 } public class EFUniversityDAL : EFEntityRepositoryBase<University, CoreDbContext>, IUniversityDAL { }
注意事项
别只改EFUniversityDAL的访问修饰符,它的所有依赖类型(接口、基类、泛型参数)的权限都得匹配,单独改一个只会让错误转移,解决不了根本问题。
内容的提问来源于stack exchange,提问作者Cassawena
相关产品推荐
相关产品推荐

