当前位置: 首页 > 知识库问答 >
问题:

系统聚合程序中的异常。ASP中的cs。NET核心MVC

孙嘉悦
2023-03-14

我有一个ASP。NET核心MVC应用程序,它使用实体框架核心O/RM。我正在应用程序中实现通用存储库模式。有两个实体,Employee

IGENERICRepository.cs-

public interface IGenericRepository<TEntity> where TEntity : class
{
    //...
}

GenericRepository.cs-这里员工部门详细信息是我的上下文类,它继承了DBContext类-

public class GenericRepository<TEntity> :IGenericRepository<TEntity> where TEntity : class
{
    DbSet<TEntity> _dbSet;
    // Dependency Injection 
    private readonly EmployeeDepartmentDetail _employeeDepartmentDetail; 
    public GenericRepository(EmployeeDepartmentDetail employeeDepartmentDetail)
    {
        _employeeDepartmentDetail = employeeDepartmentDetail;
        _dbSet = _employeeDepartmentDetail.Set<TEntity>();
    } 

    //... 
}

Program.cs-

public static void Main(string[] args)
{
    CreateHostBuilder(args).Build().Run(); // I am getting those two exceptions here
}

创业。cs-

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();
    services.AddScoped(typeof(IGenericRepository<Type>), typeof(GenericRepository<Type>)); 
}

雇员控制员。cs-

public class EmployeeController : Controller
{
    private readonly IGenericRepository<Employee> _genericRepository;
    public EmployeeController(IGenericRepository<Employee> genericRepository)
    {
        _genericRepository = genericRepository;
    } 

    //... 
}

当我运行我的应用程序时,我遇到了两个异常-

系统AggregateException HResult=0x80131500 Message=无法构造某些服务(验证服务描述符的服务类型时出错:InfrastructureLayer.GenericRepository.Interface.IGenericRepository1[System.Type]生存期:作用域实现类型:InfrastructureLayer。一般记述。实施GenericRepository1[System.Type]:适合“InfrastructureLayer”类型的构造函数。一般记述。实施找不到GenericRepository1[System.Type]”。确保类型是具体的,并且为公共构造函数的所有参数注册了服务。)来源=微软。扩展。DependencyTrace:在微软。扩展。依赖性注射。服务提供商。。微软的ctor(IEnumerable1服务描述符、服务提供者选项)。扩展。依赖性注射。ServiceCollectionContainerBuilderExtensions。微软的BuildServiceProvider(IServiceCollection服务,ServiceProviderOptions选项)。扩展。依赖性注射。DefaultServiceProviderFactory。微软的CreateServiceProvider(IServiceCollection containerBuilder)。扩展。群众或部队的集合。内部的ServiceFactoryAdapter`1。微软的CreateServiceProvider(Object containerBuilder)。扩展。群众或部队的集合。房东。Microsoft的CreateServiceProvider()。扩展。群众或部队的集合。房东。CrudEfCore上的Build()。程序C:\Users\singh\Desktop\MVC\GenericRepository\CrudEfCore\Program中的Main(字符串[]args)。cs:16行这个异常最初是在这个调用堆栈中抛出的:[外部代码]

内部异常1:InvalidOperationException:验证服务描述符的ServiceType:InfrastructureLayer时出错。一般记述。界面IGenericRepository1[System.Type]生存期:作用域实现类型:InfrastructureLayer。一般记述。实施GenericRepository1[System.Type]:适合“InfrastructureLayer”类型的构造函数。一般记述。实施找不到GenericRepository“1[System.Type]”。确保类型是具体的,并且为公共构造函数的所有参数注册了服务。

内部异常2:InvalidOperationException:类型“InfrastructureLayer”的合适构造函数。一般记述。实施找不到GenericRepository“1[System.Type]”。确保类型是具体的,并且为公共构造函数的所有参数注册了服务。

我无法理解例外,我不知道我在这里做错了什么。我知道我已经粘贴了很多代码,但我甚至不知道如何解释异常。

共有1个答案

寇夜洛
2023-03-14

这就是问题的原因

services.AddScoped(typeof(IGenericRepository<Type>), typeof(GenericRepository<Type>)); 

Type是一个抽象类,如错误消息所述:

确保类型是具体的,并且为公共构造函数的所有参数注册了服务。

注:我的

NextType不是注册泛型服务时应该使用的泛型参数

在这种情况下,可以使用(泛型)开放类型注册,无需注册每个(泛型)构造的类型:

services.AddScoped(typeof(IGenericRepository<>), typeof(GenericRepository<>)); 

ASP. NET Core中的引用依赖注入

 类似资料:
  • 我刚起步 (更新:解决方案是将UseRouting移动到/api/error路由下) 但是当时,永远不会调用错误控制器方法。

  • 我创建了一个API应用程序,没有完整的MVC模板。但是,带有正文的POST请求总是由于内部服务器错误而失败。 可能是什么原因造成的?

  • 在Asp。Net Core 3.1应用程序我有以下关于应用程序设置的部分: 我试图获取一些值,比如Facebook的Id,所以我尝试: 但这行不通。。。我怎样才能得到这些值?

  • 我不确定我是否完全正确地处理了这个问题。 背景:我有一个控制器动作GET foo()作为例子。这个foo()需要调用bar(),bar()可能需要很长时间。所以,我需要foo()在bar()完成之前(或无论何时)用“确定”来响应。 稍微复杂一点的是,bar()需要访问DBContext并从数据库中获取一些数据。在我当前的实现中,当我试图通过bar访问数据库时,会出现“DBContext Syste

  • 与SqlAlchemy一起使用的异常。 基本异常类是 SQLAlchemyError . 由于DBAPI异常而引发的异常都是 DBAPIError . exception sqlalchemy.exc.AmbiguousForeignKeysError(*arg, **kw)¶ 在联接期间两个可选择项之间可以找到多个外键匹配时引发。 exception sqlalchemy.exc.Argumen

  • 我正在实现确认电子邮件功能。我正在向用户发送一封帐户激活电子邮件,电子邮件中有激活链接。我正在尝试,当用户单击电子邮件中的链接时,它会将用户重定向到我的方法ConfirmEmail之一,该方法采用两个参数user,即加密的电子邮件和代码。当我单击调试器设置为该ConfirmEmail方法的链接时,它不会出现在那里。 确认电子邮件方式: 电子邮件中的链接如下所示: https://localhost