/// <summary> /// Паттерн "Адаптер" преобразует интерфейс класса к другому интерфейсу, на который рассчитан клиент. /// Адаптер обеспечивает совместную работу классов, невозможную в обычных условиях из-за несовместимости интерфейсов. /// </summary> public void DemoAdapter() { // Эта строка необходима для загрузки сборки DesignPatternDemos.Adapter в домен var loadAssembly = new PopulationInfoTcpService(); // Будем считать, что код ниже имитирует получение зарегистрированных имплементаций через DI-контейнер var services = AppDomain.CurrentDomain.GetAssemblies() .FirstOrDefault(x => x.GetName().Name == "DesignPatternDemos.Adapter")? .GetTypes() .Where(x => typeof(DesignPatternDemos.Adapter.IHttpService).IsAssignableFrom(x) && !x.IsInterface); var results = new List <string>(); // Инициализация сервисов и получения результата их работы foreach (var service in services) { Adapter.IHttpService serviceInstance; // Этот сервис требует зависимости, поэтому экземпляр для него создается через параметризованный конструктор if (service == typeof(PopulationInfoTcpServiceAdapter)) { serviceInstance = (Adapter.IHttpService)Activator.CreateInstance(service, new PopulationInfoTcpService()); } else { serviceInstance = (Adapter.IHttpService)Activator.CreateInstance(service); } results.Add(serviceInstance.GetResultFromHttp()); } }
public PopulationInfoTcpServiceAdapter(PopulationInfoTcpService populationInfoTcpService) { _populationInfoTcpService = populationInfoTcpService; }