Как получить методы интерфейса с другим количеством и типом параметров?C # - PullRequest
0 голосов
/ 09 июня 2018

Допустим, у меня есть несколько классов, которые имеют одинаковые действия (в моем случае я создаю инфраструктуру плагинов, которая все: Load, Run, Dispose), и я хочу использовать интерфейс, чтобы я мог создать PluginFactory дляобработать инициализацию.Проблема в том, что им всем нужны совершенно разные данные, поэтому методы будут одинаковыми, но параметры будут разными.Есть ли лучшая практика или шаблон проектирования, где я могу использовать интерфейсы и полиморфизм при передаче различных данных в методы?

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

Редактировать:

Вот пример кода:

 public interface IPlugin
    {
        void Load();
    }

    public Hubbub : IPlugin
    {
        public void Load(int individualId, IApiDataSource apiDataSource)
        {
           //code
        }
    }

public class SysEx : IPlugin
{
    Load(OAuthToken token, string connString, User user)
    {
        //code
    }
}

public class FriendPlat: IPlugin
{
    Load(string username, string password)
    {    
        //code
    }
}

1 Ответ

0 голосов
/ 09 июня 2018

Вы можете создать интерфейс, например, ILoadArgument

Создать класс для реализации IPlugin, например FriendlyPlatArgument, SysExArgument и т. Д. Эти классы dto могут реализовывать созданный вами интерфейс ILoadArgument.Может быть, им всем нужно общее свойство, например CreatedAt, которое также может перейти в интерфейс.

Теперь ваш интерфейс IPlugin может определять метод Load как

Void Load (ILoadArgument arg);

Также вы можете сделать его общим:

Пустая нагрузка (T arg), где T: ILoadArgument {°ИВ°}

...