Dnn 依赖注入 - 尝试创建控制器时发生错误...确保控制器具有无参数 public 构造函数
Dnn Dependency Injection - error occurred when trying to create a controller... make sure the controller has a parameterless public constructor
我有一个 Web API 的 Dnn 模块项目。在启动时我想为这个模块配置依赖注入。
我得到的错误是:“尝试创建 'SchoolsController' 类型的控制器时发生错误。确保控制器具有无参数 public 构造函数。”
内部异常在实际问题上更清楚一些:“尝试激活 'MyProj.Persistence.UnitOfWork.UnitOfWork' 时无法解析类型 'MyProj.Persistence.Context.PortfolioContext' 的服务”。
我猜这是因为我的 UnitOfWork class 构造函数需要 DbContext?
我的工作单元 class 看起来像这样:
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;
}
}
我的创业公司class:
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
编辑:
忘记补充说这是针对 .net 4.7.2
的 Dnn 9.6.2
原来我离得不远。
我最初尝试的地方:
services.AddSingleton<DbContext, PortfolioContext>((ctx) =>
{
return new PortfolioContext();
});
实际上应该是这样的:
services.AddSingleton<PortfolioContext>((ctx) =>
{
return new PortfolioContext();
});
我有一个 Web API 的 Dnn 模块项目。在启动时我想为这个模块配置依赖注入。
我得到的错误是:“尝试创建 'SchoolsController' 类型的控制器时发生错误。确保控制器具有无参数 public 构造函数。”
内部异常在实际问题上更清楚一些:“尝试激活 'MyProj.Persistence.UnitOfWork.UnitOfWork' 时无法解析类型 'MyProj.Persistence.Context.PortfolioContext' 的服务”。
我猜这是因为我的 UnitOfWork class 构造函数需要 DbContext?
我的工作单元 class 看起来像这样:
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;
}
}
我的创业公司class:
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
编辑:
忘记补充说这是针对 .net 4.7.2
原来我离得不远。
我最初尝试的地方:
services.AddSingleton<DbContext, PortfolioContext>((ctx) =>
{
return new PortfolioContext();
});
实际上应该是这样的:
services.AddSingleton<PortfolioContext>((ctx) =>
{
return new PortfolioContext();
});