问题描述
我有一个用于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();
});