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