Dnn依赖注入-尝试创建控制器时发生错误...确保控制器具有无参数的公共构造函数

问题描述

我有一个用于Web API的Dnn模块项目。在启动时,我要为此模块配置依赖项注入。

我得到的错误是:“尝试创建类型为'SchoolsController'的控制器时发生错误。请确保该控制器具有无参数的公共构造函数。”

内部异常在实际问题上更为清晰:“尝试激活'MyProj.Persistence.UnitOfWork.UnitOfWork'时,无法解析类型为'MyProj.Persistence.Context.PortfolioContext'的服务。”

我的猜测是这是因为我的UnitOfWork类构造函数需要DbContext吗?

我的工作单元类如下:

public class UnitOfWork: IUnitOfWork,Idisposable
{
    private readonly PortfolioContext context;

    public UnitOfWork(PortfolioContext context)
    {
        this.context = context;
        Schools = new SchoolRepository(context);
        Users = new UserRepository(context);
    }
}

我的控制器如下:

public class SchoolsController: BaseController
{
    private readonly IUnitOfWork unitOfWork;

    public SchoolsController(IUnitOfWork unitOfWork)
    {
        this.unitOfWork  = unitOfWork;
    }
} 

我的创业班:

public class Startup : IDnnStartup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddScoped<IUnitOfWork,UnitOfWork>();
    }
}

我试图在添加像这样的作用域的UnitOfWork之前添加DbContext,但是它不起作用:

services.AddSingleton<DbContext,PortfolioContext>((ctx) =>
{
    return new PortfolioContext();
});

有什么想法可以在Dnn中做到这一点吗?通常,我会通过执行以下操作来添加DBContext:

services.AddDbContext<DataContext>(x => x.UsesqlServer(Configuration.GetConnectionString("DefaultConnection")));  

但是由于某种原因,我在此上下文中的任何地方(Dnn,IDnnStartup等)都找不到扩展方法AddDbContext

编辑:
忘了补充一点,这是针对Dnn 9.6.2的,它针对.net 4.7.2

解决方法

结果证明我离你并不遥远。

我最初在哪里尝试过

services.AddSingleton<DbContext,PortfolioContext>((ctx) =>
{
    return new PortfolioContext();
});

实际上应该是这样的:

services.AddSingleton<PortfolioContext>((ctx) =>
{
    return new PortfolioContext();
});