Autofac注入多數據庫(DbContext)


 

初始化DbContext

public partial class x1_Context : DbContext
{
    public hw_siteContext()
    {
    }

    public hw_siteContext(DbContextOptions<hw_siteContext> options)
        : base(options)
    {
    }
    ...

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        ...
    }
    
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            optionsBuilder.UseMySql("...");
        }
    }

    partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
}
View Code
public partial class x2_Context : DbContext
{
    public hw_siteContext()
    {
    }

    public hw_siteContext(DbContextOptions<hw_siteContext> options)
        : base(options)
    {
    }
    ...

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        ...
    }
    
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            optionsBuilder.UseMySql("...");
        }
    }

    partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
}
View Code

注入時:

builder.RegisterType<x1_Context>().AsImplementedInterfaces().Named<DbContext>("X1Context");  //指定DbContext別名,方便注入
builder.RegisterType<x2_Context>().AsImplementedInterfaces().Named<DbContext>("X2Context"); //指定DbContext別名,方便注入

builder.Register<Func<string, DbContext>>(c=>
{
    var cc = c.Resolve<IComponentContext>();
    return named => cc.ResolveNamed<DbContext>(named);
});
View Code

 使用時:構造函數注入

public XXService(Func<string, DbContext> DbContexts)
{
  _x1Context = DbContexts("X1Context") as x1_Context;
  _x2Context = DbContexts("X2Context") as x2_Context;
}
View Code

 方法二:

不注入 Func<string, DbContext>

直接構造函數使用 Autofac.Features.Indexed.IIndex<string, DbContext> DbContexts 讀取

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM