/// <summary> /// Obtient une connexion depuis la factory. /// </summary> /// <param name="connectionString">Chaine de connexion.</param> /// <param name="providerName">Nom du provider.</param> /// <returns>Instance de la connexion.</returns> private DbConnection GetConnection(string connectionString, string providerName) { DbConnection connexion = null; DbProviderFactory dbFactory = null; // DbProviderFactories n'existe pas en .Net Standard 2.0 bool ok = DbProviderFactories.TryGetFactory(providerName, out dbFactory); if (!ok) { RegisterFactory(providerName); bool retryOk = DbProviderFactories.TryGetFactory(providerName, out dbFactory); if (!retryOk) { throw new Exception($"Impossible d'obtenir la factory à partir du provider {providerName}"); } } // Recovery of the connection in the factory connexion = dbFactory.CreateConnection(); connexion.ConnectionString = connectionString; // It returns the connection instance return(connexion); }
/// <summary> /// 加载指定数据库类型的DbProviderFactory /// </summary> /// <param name="providerType">数据库类型枚举</param> /// <returns></returns> private static DbProviderFactory ImportDbProviderFactory(DbProviderType providerType) { string providerName = providerInvariantNames[providerType]; A: if (!DbProviderFactories.TryGetFactory(providerType.ToString(), out DbProviderFactory factory)) { //var wsd = DbProviderFactories.GetProviderInvariantNames(); //Assembly assembly = Assembly.Load(providerName); //Type type = assembly.GetType("System.Data.SqlClient.SqlClientFactory"); //System.Data.SqlClient.SqlClientFactory //AddFactory(providerType, type);//type//"System.Data.SqlClient.SqlClientFactory" AddFactory(providerType.ToString(), providerName, true); //AddFactory<System.Data.SqlClient.SqlClientFactory>("asd"); goto A; } //DbProviderFactory factory; //try //{ // //从全局程序集中查找 // factory = DbProviderFactories.GetFactory(providerName); //} //catch //(ArgumentException e) //{ // factory = null; //} return(factory); }
private static void RegisterDbProviderFactories() { var dbProviderFactories = Config.GetSection("DbProviderFactories").GetChildren(); foreach (IConfigurationSection section in dbProviderFactories) { if (!DbProviderFactories.TryGetFactory(section.Key, out _)) { DbProviderFactories.RegisterFactory(section.Key, section.Value); } } }
private static DbProviderConnectionFactory CreateConnectionFactory(IConfiguration configuration) { var providerInvarianName = "System.Data.SqlClient"; if (!DbProviderFactories.TryGetFactory(providerInvarianName, out var factory)) { DbProviderFactories.RegisterFactory(providerInvarianName, SqlClientFactory.Instance); factory = DbProviderFactories.GetFactory(providerInvarianName); } return(new DbProviderConnectionFactory(factory, configuration)); }
public static void Init() { if (DbProviderFactories.TryGetFactory("DataProvider", out DbProviderFactory factory) == false) { DbProviderFactories.RegisterFactory("DataProvider", SqlClientFactory.Instance); } if (Configuration == null) { var configurationBuilder = new ConfigurationBuilder(); Configuration = configurationBuilder.AddJsonFile("appSettings.json").Build(); } }
// This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { services.AddRouting(); services.AddMvc(config => { }); services.AddGenericBackend() .ConfigureMiddleware(m => { m.AlwaysWrapJson = true; m.Prefix = "/rest"; }) .ConfigureOpenApiGeneration(o => { o.PersistResultSets = true; o.ParameterFieldsAreRequired = true; o.ResponseFieldsAreRequired = true; o.UseSwagger2 = false; }) .AddFileSupport() .AddXmlSupport() .AddSystemParameters(); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" }); c.AddGenericBackend(); }); if (!DbProviderFactories.TryGetFactory("System.Data.SqlClient", out var _)) { DbProviderFactories.RegisterFactory("System.Data.SqlClient", System.Data.SqlClient.SqlClientFactory.Instance); } services.AddTransient <Filter.IRequestInterceptor, TestRequestInterceptor>(); services.AddScoped(typeof(DbConnection), (s) => { var conf = s.GetRequiredService <IConfiguration>(); var hostenv = s.GetRequiredService <IHostingEnvironment>(); var constr = conf["ConnectionStrings:DefaultConnection"]; constr = constr.Replace("{{workdir}}", hostenv.ContentRootPath); return(Kull.Data.DatabaseUtils.GetConnectionFromEFString(constr, true)); }); }
// This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { services.AddRouting(); services.AddMvc(config => { }); services.AddGenericBackend() .ConfigureMiddleware(m => { m.Prefix = "/rest"; }) .ConfigureOpenApiGeneration(o => { o.PersistResultSets = true; }) .AddFileSupport() .AddXmlSupport() .AddSystemParameters(); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" }); c.AddGenericBackend(); }); if (!DbProviderFactories.TryGetFactory("System.Data.SqlClient", out var _)) { DbProviderFactories.RegisterFactory("System.Data.SqlClient", System.Data.SqlClient.SqlClientFactory.Instance); } services.AddScoped(typeof(DbConnection), (s) => { var conf = s.GetRequiredService <IConfiguration>(); var constr = conf["ConnectionStrings:DefaultConnection"]; return(Kull.Data.DatabaseUtils.GetConnectionFromEFString(constr, true)); }); }
/// <summary> /// 根据提供程序的固定名称获取<see cref="DbProviderFactory"/>对象。 /// </summary> /// <param name="providerName"></param> /// <returns></returns> public virtual DbProviderFactory GetFactory(string providerName) { #if NETFRAMEWORK return(DbProviderFactories.GetFactory(providerName)); #else if (DbProviderFactories.TryGetFactory(providerName, out DbProviderFactory providerFactory)) { return(providerFactory); } var providerFactoryType = typeof(DbProviderFactory); foreach (var assemblie in AppDomain.CurrentDomain.GetAssemblies()) { if (assemblie.GlobalAssemblyCache) { continue; } var factoryType = assemblie.GetTypes().FirstOrDefault((t) => t.Namespace == providerName && t.IsSubclassOf(providerFactoryType)); if (factoryType != null) { DbProviderFactories.RegisterFactory(factoryType.Namespace, factoryType); return(DbProviderFactories.GetFactory(providerName)); } } var path = System.IO.Path.GetFullPath(System.IO.Path.ChangeExtension(providerName, "dll")); if (System.IO.File.Exists(path)) { var assembly = Assembly.LoadFile(path); var factoryType = assembly.GetTypes().FirstOrDefault((t) => t.Namespace == providerName && t.IsSubclassOf(providerFactoryType)); if (factoryType != null) { DbProviderFactories.RegisterFactory(factoryType.Namespace, factoryType); return(DbProviderFactories.GetFactory(providerName)); } } return(null); #endif }
private DbProviderFactory GetDbProviderFactory(string providerInvariantName) { bool providerExist = DbProviderFactories.TryGetFactory(providerInvariantName, out DbProviderFactory dbProviderFactory); if (providerExist) { return(dbProviderFactory); } Assembly assembly = Assembly.Load(providerInvariantName); if (assembly != null) { Type type = null; foreach (var item in assembly.GetTypes()) { if (item.BaseType == typeof(DbProviderFactory) && item.Name.EndsWith("Factory")) { type = item; break; } } if (type != null) { FieldInfo instanceField = type.GetField("Instance"); if (instanceField != null) { var instance = instanceField.GetValue(null); if (instance != null && instance is DbProviderFactory) { return(instance as DbProviderFactory); } } } } return(null); }