1. 程式人生 > 實用技巧 >Autofac注入多資料庫(DbContext)

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