У меня есть служба поддержки клиентов для 6 разных магазинов с 3 разными API-системами для магазинов, поэтому в моем проекте есть 3 библиотеки
Как и
Shopsytem 1 -> (Lib1)
Shop A
Shop B
Shop C
Shopsystem 2 -> (Lib2)
Shop D
Shop E
Shosystem 3 -> (Lib3)
Shop F
У меня есть «Контроллер контактов» в Lib1,Lib2 / Lib3, унаследованный от Lib1
Теперь мне нужно вызвать функцию, подобную
contractService.getContracts();
С моим интерфейсом
public interface IContractService
{
List<ContractData> GetContracts()
}
В каждой библиотеке Lib есть класс, подобный
public Shopsystem1ContractService : IContractService {
List<ContractData> GetContracts(){...}
}
public Shopsystem2Contractservice : IContractService {
List<ContractData> GetContracts(){...}
}
public Shopsystem3ContractService : IContractService {
List<ContractData> GetContracts(){...}
}
Но теперь мне нужно что-то вроде этого:
public Shopsystem1ContractService : IContractService {
List<Shopsystem1ContractData> GetContracts(){...}
}
public Shopsystem2ContractService : IContractService {
List<Shopsystem2ContractData> GetContracts(){...}
}
public Shopsystem3contractservice : IContractservice {
List<Shopsystem3ContractData> GetContracts(){...}
}
Обновление:
Теперь я использую универсальный интерфейс в соответствии с Юхарром и Юлиусом:
interface IContractService<TContract> where TContract : ContractData
{
List<TContract> GetContracts();
}
public Shopsystem1ContractService : IContractService<Shopsystem1ContractData>
{
List<Shopsystem1ContractData> GetContracts(){...}
}
public Shopsystem2ContractService : IContractService<Shopsystem2ContractData>
{
List<Shopsystem2ContractData> GetContracts(){...}
}
public Shopsystem3contractservice : IContractservice<Shopsystem3ContractData>
{
List<Shopsystem3ContractData> GetContracts(){...}
}
IoCModule:
ioc.Register<IContractService<Shopsystem1ContractData>, Shopsystem1contractservice>();
ioc.Register<IContractService<Shopsystem2ContractData>, Shopsystem2contractservice>();
ioc.Register<IContractServic<Shopsystem3ContractData>, Shopsystem2contractservice>();
Но как я могу реализовать это в моем ContractController?
private readonly IContractService<ContractData> contract;
public KontaktController(
IContractService<ContractData> contract,
{
this.contract = contract;
}
IContractService нужен тип, откуда он знает Shopsystem{1-3} ContractData?
Самый простой способ - создать Contractcontroller в Lib2 и Lib3, но было бы здорово, если бы я мог сделать это в моем globallib (lib1).У меня есть контроллеры в Lib 2 и Lib3, но только для явных конечных точек