NET核心 - 在Biz逻辑层的DI

时间:2017-04-30 15:12:24

标签: c# entity-framework asp.net-web-api asp.net-core .net-core

我的项目中有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错误。我没有看到实际的错误。我怎么看实际的错误?

提前致谢。

1 个答案:

答案 0 :(得分:1)

@ TSeng的最后评论有效,出于某种原因,我的代码中的construtor是私有的。在将其更改为公开后,它开始起作用。

相关问题