0

我有一个用于 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")));  

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

编辑:
忘了补充说这是针对.net 4.7.2的Dnn 9.6.2

4

1 回答 1

0

原来我离得不远。

我最初尝试过的地方:

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

实际上应该是这样的:

services.AddSingleton<PortfolioContext>((ctx) =>
{
    return new PortfolioContext();
});
于 2020-08-28T15:00:00.570 回答