I am trying to model a design for a C# project. Trying to follow the SOLID principles, this is what I've got so far:SDKClient class which has three (for this explanation) important properties (IAuthProvider, IHttpProvider and IFileService). The SDKClient should be decoupled, so I am always free to exchange the auth class or http class. That's why I am only using Interfaces (for later DI).But the real problem lays in the services. So far I was using the client purely for so called FileServices, which share the same behaviour. Now I am not sure what to do. I am supposed to use new Services, which don't share anything in common with FileServices.So my question is, is there a way to generalize it to something like IService, or is this the wrong way, are maybe some factories the right solution here, or shouldn't the service be in the SDKClient?I am pretty inexperienced in software design, that's why I am hoping for really neat solutions/ideas.If my explanation wasn't sufficient, just ask me questions, about the points you couldn't understand.
software design for a class utilizing many different services
c#;design;design patterns;architecture;interfaces
One could make it generic:public interface IService<in TRequest, out TResponse>{    TResponse Execute(TRequest request);}public interface IAsyncService<in TIn, TOut>{    Task<TOut> ExecuteAysnc(TIn request);}Basically, we send something in and get something back.  Does it use the file system, call a web service, call a database, that's up to the implementation!If it does use the file service, then the IService implementation will have an IFileService parameter in the constructor.  So, each service could have additional dependencies as needed depending on what they are doing.