/// <summary>
 /// 基于EF的单元测试可以通过初始化自己的OptionBuilder
 /// </summary>
 /// <param name="optionFactory"></param>
 public static void Initlize(IContextOptionBuilderFactory optionFactory)
 {
     if (DBContextOptionsLoader.optionFactory == null)
     {
         lock (lockRoot)
         {
             if (DBContextOptionsLoader.optionFactory == null)
             {
                 DBContextOptionsLoader.optionFactory = optionFactory;
             }
         }
     }
 }
        public static DbContextOptionsBuilder <T> CreateDbOption <T>(DbInfo dbInfo)
            where T : DbContext
        {
            // 这里是public,没办法防止外面随意调用,所以为了防止初始化后被随意改变,这里搞成单例
            if (optionFactory == null)
            {
                lock (lockRoot)
                {
                    if (optionFactory == null)
                    {
                        switch (dbInfo.DbType)
                        {
                        default:
                        case DbType.MySql:
                            optionFactory = new MySqlDBContextOptionBuilder();
                            break;

                        case DbType.Oracle:
                            optionFactory = new OracleDBContextOptionBuilder();
                            break;

                        case DbType.SqlServer:
                            optionFactory = new SqlServerDBContextOptionBuilder();
                            break;

                        case DbType.InMemory:
                            optionFactory = new InMemoryDBContextOptionBuilder();
                            break;

                        case DbType.PostgreSQL:
                            optionFactory = new PostgresqlDBContextOptionBuilder();
                            break;
                        }
                    }
                }
            }
            DbContextOptionsBuilder <T> options = optionFactory.CreateOptionsBuilder <T>(optionFactory.GetConnectionString(dbInfo));

            return(options);
        }