AbpStepByStep icon indicating copy to clipboard operation
AbpStepByStep copied to clipboard

abp 模块化

Open xkissboss opened this issue 5 years ago • 3 comments

abp模块化使用插件式开发,如何使用各自的db

xkissboss avatar Feb 17 '20 03:02 xkissboss

不同的模块可以有不同的DbContext,连接不同的数据库字符串,比如某个项目有两个模块,相应的DbContext分别为MyFlowDbContext和MyPlatDbContext,这两个DbContext可以分别定义不同的连接字符串: public class MyPlatDbContext : AbpZeroDbContext<Tenant, Role, User> { ...... public MyPlatDbContext() : base("DefaultPlat") {

    }
}

...... public class MyFlowDbContext:AbpDbContext { ...... public MyFlowDbContext() : base("name=DefaultFlow") {

    }

}

zhenl avatar Feb 17 '20 13:02 zhenl

MyPlatDbContext和MyFlowDbContext存在相同的表 那么使用IRepository注入的时怎么动态制定获取的DbContext 或者留个微信,有空私聊

xkissboss avatar Feb 18 '20 01:02 xkissboss

两个模块之间是独立的,每个模块中各个部分的依赖关系已经设定,因此,不会出现冲突,比如: IRepository<ProcessInstancePermission, int>,这里ProcessInstancePermission在MyFlowCoreModule中定义,MyFlowDataModule 依赖于MyFlowCoreModule,使用MyFlowDbContext,示例代码如下:

[DependsOn( //typeof(AbpZeroEntityFrameworkModule), typeof(MyPlatCoreModule), typeof(MyFlowCoreModule), typeof(AbpEntityFrameworkModule))] public class MyFlowDataModule : AbpModule { public override void PreInitialize() { Database.SetInitializer(new CreateDatabaseIfNotExists<MyFlowDbContext>()); Database.SetInitializer<MyFlowQueryDbContext>(null); Configuration.DefaultNameOrConnectionString = "Default"; }

    public override void Initialize()
    {
        IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
        IocManager.IocContainer.Register(
             Component.For<ISqlQuery<ProcessInstanceStatus>>().ImplementedBy<SqlQuery<ProcessInstanceStatus>>().LifestyleTransient()
);
}
}

zhenl avatar Feb 19 '20 00:02 zhenl