Я хочу заменить этот код аналогичным кодом с использованием отражения, чтобы DLL не требовала ссылки на библиотеку Oracle.ManagedDataAccess.Client. Прямо сейчас мне нужно сослаться
Код: Выделить всё
Oracle.ManagedDataAccess.ClientКод: Выделить всё
DbProviderFactories.RegisterFactory("Oracle.ManagedDataAccess.Client",
Oracle.ManagedDataAccess.Client.OracleClientFactory.Instance);
Код: Выделить всё
var oracleClientInstance = (object?)null;
//getting assembly takes quite a bit of time
var oracleClientAssembly = AppDomain.CurrentDomain.GetAssemblies()
.FirstOrDefault(a => a.FullName.Contains("Oracle.ManagedDataAccess"));
if (oracleClientAssembly != null)
{
var oracleClientType = oracleClientAssembly.GetType("Oracle.ManagedDataAccess.Client.OracleClientFactory");
if (oracleClientType != null)
{
PropertyInfo factoryInstanceProperty =
oracleClientType.GetProperty("Instance", BindingFlags.Public | BindingFlags.Static);
//factoryInstanceProperty is always null
if (factoryInstanceProperty != null)
{
oracleClientInstance = factoryInstanceProperty.GetValue(null);
}
}
}
Код: Выделить всё
public sealed class OracleClientFactory : DbProviderFactory
{
public static readonly OracleClientFactory Instance = new OracleClientFactory();
//omitted code
}
Как получить свойство OracleClientFactory.Instance посредством отражения?
Подробнее здесь: https://stackoverflow.com/questions/797 ... ion-in-c-s
Мобильная версия