Autofac注入多資料庫(DbContext)
阿新 • • 發佈:2020-12-23
初始化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) { ... }View Codeprotected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { optionsBuilder.UseMySql("..."); } } partial void OnModelCreatingPartial(ModelBuilder modelBuilder); }
public partial classView Codex2_Context : DbContext { public hw_siteContext() { } public hw_siteContext(DbContextOptions<hw_siteContext> options) : base(options) { } ... protected override void OnModelCreating(ModelBuilder modelBuilder) { ... } protected overridevoid OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { optionsBuilder.UseMySql("..."); } } partial void OnModelCreatingPartial(ModelBuilder modelBuilder); }
注入時:
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