我的项目中有4个级别 - webapi(UI),商业逻辑,DAL和DBContext。
在上下文文件中,使用AddDBContext,我添加了DBContext并使用ADDScoped我添加了biz逻辑对象。所以在控制器的构造函数中,我自动获得了bizlogic对象的实例。在bizlogics的构造函数中,我能够获得DBContext的实例。
但我想要实现的是使用DI在bizlogic层中创建DAL实例。我尝试在startup.cs中使用AddScoped,但它无法正常工作。下面是代码
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.AddDbContext<ClientEntities>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
// Repositories
//services.AddScoped<IDBClient, DBClient>(); -- my DAL layer
services.AddScoped<ITAConfigRepository, TAConfigRepository>(); -- my biz logic layer
//var dbContext = DBContextFactory.Create("DB1");
//services.AddEntityFrameworkSqlServer().AddDbContext<dbContext>(); -- my DbContext layer
}
Controller.cs
public TAMController(ITAConfigRepository repo)
{
_itaconfigrepository = repo;
}
bizlogic图层
public TAConfigRepository(ClientEntities context) -- This works
{
ctx = context;
}
public TAConfigRepository(IDBClient obj) -- This does not work
{
_dbclient = obj;
}
DAL图层
public DBClient(ClientEntities ctx)
{
_context = ctx;
}
DBContextlayer
public ClientEntities(DbContextOptions<ClientEntities> options) : base(options)
{
}
我如何实现这一目标?一些ppl可能会建议使用DAL层,但如果我想在这个biz逻辑类中创建任何其他biz逻辑类的实例,问题仍然存在。
此外,如果有任何错误,我只得到500错误。我没有看到实际的错误。我怎么看实际的错误?
提前致谢。
答案 0 :(得分:1)
@ TSeng的最后评论有效,出于某种原因,我的代码中的construtor是私有的。在将其更改为公开后,它开始起作用。