SpacePurr
@SpacePurr
c#, wpf

Как использовать один и тот же код с разными библиотеками?

Здравствуйте.

Я использую библиотеку для работы с моделями, которая использует две другие библиотеки для работы с контекстом модели в зависимости от ее типа.
Пусть будет Type1 и Type2.

Принцип работы у обеих библиотек полностью одинаковый, классы идентичны, отличаются только пути к этим классам.
Например для первой Type1.Resource и для второй Type2.Resource.

Для работы с моделью я создал два класса LinksMasterType1 и LinksMasterType2, с полностью идентичным кодом, но с разным набором подключаемых библиотек.

Для первой:
using Type1.Resource;
Для второй, соответственно, Type2.Resource.

Классы имеют один общий интерфейс ILinksMaster.

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

ILinksMaster linksMaster = null;
switch(type)
     case(type1)
          linksMaster = new LinksMasterType1();
          break;
     case(type2)
          linksMaster = new LinksMasterType2();
          break;


И все работает, но, если что то поменялось, то мне приходится вносить изменения в оба класса.

Можно ли каким нибудь образом либо динамически подключать библиотеки, либо использовать любой другой путь, который позволит мне держать только один класс LinksMaster, но использовать разные типы переменных в зависимости от условий.

Спасибо.
  • Вопрос задан
  • 64 просмотра
Решения вопроса 1
yarosroman
@yarosroman Куратор тега C#
C# the best
Интерфейс это хорошее решение. Но для этого надо хорошо его продумать. Есть ещё способ, использовать рефлексию и динамическое подключение сборок, но это ресурсозатратно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
Генерик классы
class Link<T>
        {
            public string WhatClass()
            {
                if (typeof(T) == typeof(int))
                    return "Number";
                else
                    if (typeof(T) == typeof(string))
                    return "Text";

                return "X3";
            }
        }

        static void Main(string[] args)
        {
            var link = new Link<string>();
            var cl = link.WhatClass();
        }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы