Библиотеки с одинаковыми интерфейсами
От: Степанов Алексей Александрович  
Дата: 21.08.06 10:19
Оценка:
Имеется несколько библиотек с идентичными интерфейсами.

Требуется в зависимости от некоторых начальных условий
использовать ту или иную библиотеку.

Как бы сделать это наиболее прозрачно, т.е. без внесения
в основной код, использующий эти интерфейсы, постоянных
проверок условий и т.п.

Может стоит задуматься о рефлекшне? Но не появятся ли
неоправданные, в данном случае, тормоза?
Re: Библиотеки с одинаковыми интерфейсами
От: pt4h Беларусь http://dzmitryhuba.blogspot.com/
Дата: 21.08.06 10:32
Оценка:
Здравствуйте, Степанов Алексей Александрович, Вы писали:

САА>Имеется несколько библиотек с идентичными интерфейсами.


САА>Требуется в зависимости от некоторых начальных условий

САА>использовать ту или иную библиотеку.

САА>Как бы сделать это наиболее прозрачно, т.е. без внесения

САА>в основной код, использующий эти интерфейсы, постоянных
САА>проверок условий и т.п.

Посмотрите в сторону паттерна AbstractFactory. К примеру:

public abstract class AsbtractComponentFactory
{
    public IComponentA CreateComponentA();
}

public class ConcreteComponentFactory
{
    public override IComponentA CreateComponentA()
    {
        return new ConcreteComponentA();
    }
}


То есть внутри конкретной фабрики вы можете создавать экземпляры классов конкретной библиотеки. В коде повсеместно для создания объектов используйте абстрактную фабрику и вы избежите проверок.

САА>Может стоит задуматься о рефлекшне? Но не появятся ли

САА>неоправданные, в данном случае, тормоза?

Вы можете при старте приложения создать активатором конкретную фабирку и закэшировать ее — в этом случае вопрос быстродействия не сильно пострадает.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Библиотеки с одинаковыми интерфейсами
От: Lloyd Россия  
Дата: 21.08.06 10:33
Оценка:
Здравствуйте, Степанов Алексей Александрович, Вы писали:

САА>Имеется несколько библиотек с идентичными интерфейсами.


САА>Требуется в зависимости от некоторых начальных условий

САА>использовать ту или иную библиотеку.

Во время исполнения программы или во время компиляции?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Библиотеки с одинаковыми интерфейсами
От: Степанов Алексей Александрович  
Дата: 21.08.06 10:38
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, Степанов Алексей Александрович, Вы писали:


САА>>Имеется несколько библиотек с идентичными интерфейсами.


САА>>Требуется в зависимости от некоторых начальных условий

САА>>использовать ту или иную библиотеку.

L>Во время исполнения программы или во время компиляции?


Во время исполнения: программа запускается с некоторыми
аргументами и в зависимости от них, должен производиться
выбор необходимой библиотеки.
Re: Библиотеки с одинаковыми интерфейсами
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 21.08.06 10:39
Оценка: 1 (1)
Здравствуйте, Степанов Алексей Александрович, Вы писали:

САА>Может стоит задуматься о рефлекшне? Но не появятся ли

САА>неоправданные, в данном случае, тормоза?
К чему такие сложности?
Просто провайдера библиотек не хватит? Нечто вроде следующего...

IA.cs (общий интерфейс)
namespace ru.rsdn.rsn81.test {
    interface IA {
        string get();
    }
}
A.cs (первая библиотека)
namespace ru.rsdn.rsn81.test {
    class A: IA {
        public string get() {
            return GetType().ToString();
        }
    }
}
B.cs (вторая библиотека)
namespace ru.rsdn.rsn81.test {
    class B: IA {
        public string get() {
            return this.GetType().ToString();
        }
    }
}
Provider.cs
namespace ru.rsdn.rsn81.test {
    class Provider {
        private IA ia;

        public Provider(bool condition) {
            if (condition)
                ia = new A();
            else ia = new B();
        }

        public IA getIA() {
            return ia;
        }
    }
}
Использование: new Provider(condition).getIA();
... << RSDN@Home 1.2.0 alpha rev. 655>>
Re[3]: Библиотеки с одинаковыми интерфейсами
От: Lloyd Россия  
Дата: 21.08.06 10:44
Оценка:
Здравствуйте, Степанов Алексей Александрович, Вы писали:

САА>Во время исполнения: программа запускается с некоторыми

САА>аргументами и в зависимости от них, должен производиться
САА>выбор необходимой библиотеки.

Можно попробовать поиграться с AppDomain.AssemblyResolve. Возможно, что-нибудь и получится.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Библиотеки с одинаковыми интерфейсами
От: Степанов Алексей Александрович  
Дата: 21.08.06 10:45
Оценка:
Здравствуйте, rsn81, Вы писали:


R>Просто провайдера библиотек не хватит? Нечто вроде следующего...


Возможно и хватит, спасибо! Я то сразу о чем-то уж очень хитром
задумался
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.