C # и примерьте пространство имен - PullRequest
0 голосов
/ 07 сентября 2011

У меня есть программа, которая делает много вещей, одна из которых подключается к базе данных Oracle, используя Oracle.DataAccess.Client; Теперь нет необходимости загружать это пространство имен. Я не могу включить их, потому что это из пакета Oracle db. Мне нужно что-то вроде попытки, но в пространстве имен. Теперь без этого пространства имен приложение выдает необработанное исключение и вылетает. Я хочу поймать это исключение и установить флаг, например noOracleClient=true;.

Ответы [ 3 ]

0 голосов
/ 07 сентября 2011

Я бы предложил поместить ваш код доступа Oracle в отдельную сборку. Затем предоставьте функциональность через интерфейс и код для этого интерфейса.

Тогда вы можете использовать что-то вроде Ninject, например, предложенное Джоэлом С. или, возможно, MEF (http://stevenhollidge.blogspot.com/2011/04/how-to-use-mef-with-c.html), чтобы загрузить вашу сборку в качестве конкретного класса.

0 голосов
/ 07 сентября 2011

Попробуйте загрузить сборку, используя полное имя "Oracle.DataAccess.Client" по отражению

using System.Reflection;
string fullName = "fully qualified assembly name";
Assembly assembly = Assembly.LoadFrom(fullName);

Если Oracle.DataAccess.Client находится в GAC, этот код будет выполнен правильно, в противном случае будет сгенерировано исключение. Необходимо указать полное имя сборки для загрузки определенной версии Oracle Client

0 голосов
/ 07 сентября 2011

Я не думаю, что это сработает так, как вы хотите.Похоже, что вы действительно хотите, это структура внедрения зависимостей, как Ninject.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...