zoukankan      html  css  js  c++  java
  • Option

     1)注册仓储  AbpCommonDbContextRegistrationOptions(基类)

    为了创建Options,使用了建造者模式IAbpCommonDbContextRegistrationOptionsBuilder,在依赖注入注册,IServiceCollection的扩展方法,使用匿名委托

    Action<IAbpCommonDbContextRegistrationOptionsBuilder>提供给用户进行配置

    用法:可以给每一个entity设置仓储,仓储泛型参数分两个,一个key,一个无key,为了简单可以给整个 DbContext设置仓储,此默认仓储的提供在 Options下属性DefaultRepositoryDbContextType,为了简单还设置一个RepositoryRegistrarBase的基类来实现注册,如果用户指定默认仓储实现类(SetDefaultRepositoryClasses),则按此SpecifiedDefaultRepositoryTypes, 则使用其基类的实现类GetRepositoryType方法来实现,

    规格:

    AddDefaultRepositories:用于给DbContext的默认仓储

    AddRepository:给每个entity设定仓储

    SetDefaultRepositoryClasses:默认仓储提供的Class

    ReplaceDbContext 替换DbContext

    其RepositoryRegistrarBase基类的实现有有EfCoreRepositoryRegistrar,MemoryDbRepositoryRegistrar,MongoDbRepositoryRegistrar

     2)AbpDbConnectionOptions

    字典,Dictionary<string, string>;默认的是DefaultConnectionStringName是Default,提供Get与Set方法

    用法,DefaultConnectionStringResolver,根据提供的connectionStringName,从AbpDbConnectionOptions里的Dictionary解析出字符串

    MultiTenantConnectionStringResolver:是覆盖方法,

    public override string Resolve(string connectionStringName = null)
            {
                //No current tenant, fallback to default logic
                if (_currentTenant.Id == null)
                {
                    return base.Resolve(connectionStringName);
                }
                using (var serviceScope = _serviceProvider.CreateScope())
                {
                    var tenantStore = serviceScope
                        .ServiceProvider
                        .GetRequiredService<ITenantStore>();
                    var tenant = tenantStore.Find(_currentTenant.Id.Value);
                    if (tenant?.ConnectionStrings == null)
                    {
                        return base.Resolve(connectionStringName);
                    }
                    //Requesting default connection string
                    if (connectionStringName == null)
                    {
                        return tenant.ConnectionStrings.Default ??
                               Options.ConnectionStrings.Default;
                    }
                    //Requesting specific connection string
                    var connString = tenant.ConnectionStrings.GetOrDefault(connectionStringName);
                    if (connString != null)
                    {
                        return connString;
                    }
                    /* Requested a specific connection string, but it's not specified for the tenant.
                     * - If it's specified in options, use it.
                     * - If not, use tenant's default conn string.
                     */
                    var connStringInOptions = Options.ConnectionStrings.GetOrDefault(connectionStringName);
                    if (connStringInOptions != null)
                    {
                        return connStringInOptions;
                    }
                    return tenant.ConnectionStrings.Default ??
                           Options.ConnectionStrings.Default;
                }
            }
  • 相关阅读:
    mat工具记录一次full gc的过程
    2021年官网下载各个版本JDK最全版与官网查阅方法
    如何用vmkping命令调试vsphere环境中的VMkernel网络连接(ISCSI 开启巨帧)
    vsphere 虚拟机的迁移,冷迁移,vmotion(热迁移)
    VMkernel 级别的 TCP/IP 堆栈解释
    Ubuntu/Linux 开机运行指定的命令/自动运行命令
    桌面信息软件Desktop Info配置
    Windows10下插入USB串口设备后鼠标跳屏问题——Microsoft Serial Ballpoint
    Windows桌面配置常用软件总结
    安装Linux双系统取消快速启动,为什么在双启动时禁用Windows 8上的快速启动?
  • 原文地址:https://www.cnblogs.com/cloudsu/p/11804281.html
Copyright © 2011-2022 走看看