I have a customerservice for 6 different shops with 3 different shopystem apis, so I have 3 libs in my Project
Like
Shopsytem 1 -> (Lib1)
Shop A
Shop B
Shop C
Shopsystem 2 -> (Lib2)
Shop D
Shop E
Shosystem 3 -> (Lib3)
Shop F
I have a "Contactcontroller" in Lib1, Lib2/Lib3 inherited from Lib1
Now I need to call a function like
contractService.getContracts();
With my Interface
public interface IContractService
{
List<ContractData> GetContracts()
}
In each Lib I have a class like
public Shopsystem1ContractService : IContractService {
List<ContractData> GetContracts(){...}
}
public Shopsystem2Contractservice : IContractService {
List<ContractData> GetContracts(){...}
}
public Shopsystem3ContractService : IContractService {
List<ContractData> GetContracts(){...}
}
But Now I need something like this:
public Shopsystem1ContractService : IContractService {
List<Shopsystem1ContractData> GetContracts(){...}
}
public Shopsystem2ContractService : IContractService {
List<Shopsystem2ContractData> GetContracts(){...}
}
public Shopsystem3contractservice : IContractservice {
List<Shopsystem3ContractData> GetContracts(){...}
}
Update:
Now I use a generic interface according to juharr and Julius:
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>();
But how can I implement this in my ContractController?
private readonly IContractService<ContractData> contract;
public KontaktController(
IContractService<ContractData> contract,
{
this.contract = contract;
}
IContractService needs a type, how does it know Shopsystem{1-3}ContractData?
The easy way would be to create a Contractcontroller in Lib2 and Lib3, but I would be great if I could do that in my globallib (lib1). I have controllers in Lib 2 and Lib3, but only for explicit endpoints