• 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;
                }
            }
  • 相关阅读:
    PVT--无卷积密集预测的多功能backbone
    MobileNet系列之MobileNet_v3
    MobileNet系列之MobileNet_v2
    CVPR2021 | 开放世界的目标检测
    Siamese network总结
    文字识别OCR开源框架的对比--Tesseract vs EasyOCR
    CVPR2021|一个高效的金字塔切分注意力模块PSA
    Boltdb学习笔记之二--数据结构
    C++关键字之likely和unlikely
    Boltdb学习笔记之〇--概述
  • 原文地址:https://www.cnblogs.com/cloudsu/p/11804281.html
Copyright © 2020-2023  润新知