代码之家  ›  专栏  ›  技术社区  ›  GregJF

AddDbContext在一个请求中创建两个实例

  •  0
  • GregJF  · 技术社区  · 7 年前

    我有一个ASP。NET core 2.1应用程序和EF 2 core 我正在使用内置的DI 我这样注册我的课程: 在初创阶段。cs,在配置服务中

        var connectionString = this.configuration.GetConnectionString("MYConnection");
         services.AddDbContext<IMyContext, MyContext>(
                options => options.UseSqlServer(connectionString));
    
         services.AddScoped<IMy1Dao, My1Dao>();
         services.AddScoped<IMy2Dao, My2Dao>();
         services.AddScoped<IMyService, MyService>();
    

    我像这样注入类:

    public class MyController : Controller, IMyController{      
        private readonly IMyService myService;
        public  MyController(IMyService myService)
        {     
                    this.myService = myService;      
        }
        public async Task<List<MyBatchUIDTO>> GetMyBatches([FromBody]List<short> ids)
        {
           return await myService.GetMyBatches(ids);
        }
    }
    public class MyService : IMyService{
        private readonly IMy1Dao my1Dao;
        private readonly IMy2Dao my2Dao;
        public MyService(IMy1Dao my1Dao, IMy2Dao my2Dao)
        {  
            this.my1Dao = my1Dao;
            this.my2Dao = my2Dao;
        }
    }
    public  partial class MyContext : DbContext, IMyContext
    {   
        public MyContext() { }  
        public MyContext(DbContextOptions<MyContext> options)
        {
    
    }
        //left out DBSET<> details
    }
    public class My1Dao : IMy1Dao
    {
        private IMyContext context
        public My1Dao(IMyContext context)
        {
            this.context = context
        }              
    }
    public class My2Dao :  IMy2Dao
    {
        private IMyContext context
        public My2Dao(IMyContext context)
        {
            this.context = context
        }              
    }
    

    但是我在MyService构造函数中得到了两个不同的MyContext实例。 而且,当我读到2个DAO时,它们并不共享返回的集。 这就是我需要他们做的。

    0 回复  |  直到 7 年前
    推荐文章