Получение значения null для свойства OracleClientFactory.Instance посредством отражения в C#C#

Место общения программистов C#
Ответить
Anonymous
 Получение значения null для свойства OracleClientFactory.Instance посредством отражения в C#

Сообщение Anonymous »

В моем проекте библиотеки классов .NET 8 есть следующий код. Пользователь, то есть разработчик, использующий эту DLL, может либо иметь ссылку в своем проекте на библиотеку Oracle.ManagedDataAccess.Client, либо использовать библиотеку SqlClient, доступную по умолчанию.
Я хочу заменить этот код аналогичным кодом с использованием отражения, чтобы DLL не требовала ссылки на библиотеку Oracle.ManagedDataAccess.Client. Прямо сейчас мне нужно сослаться

Код: Выделить всё

Oracle.ManagedDataAccess.Client
для запуска приведенного ниже кода.

Код: Выделить всё

DbProviderFactories.RegisterFactory("Oracle.ManagedDataAccess.Client",
Oracle.ManagedDataAccess.Client.OracleClientFactory.Instance);
Я попробовал приведенный ниже код, где пытаюсь получить свойство OracleClientFactory.Instance с помощью отражения, но получаю значение null для FactoryInstanceProperty.

Код: Выделить всё

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);
}
}
}
Я нашел код OracleClientFactory, и его код для свойства Instance приведен ниже. Мне нужно получить доступ к этому свойству посредством отражения.

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»