"but then I need to create some class to invoke all these classes,
wouldn't it violate the single responsibility principle?"
I think I see what's the cause of your confusion; this is not in itself a violation of the SRP, because newly introduced class is not actually responsible for the behaviors implemented by the other classes.
It simply receives some high level requests and forwards (parts of) the work to those other classes. Its responsibility is to coordinate their interaction in some way.
One of the key motivations behind SRP is to avoid interdependencies between parts of the code that handle each responsibility (if it's all in the same class, the code can become tangled in subtle ways). Having separate, well defined public interfaces1 helps with that, because it hides the implementation details, and limits/structures the ways in which these classes can interact - so that a change request that affects only one of the classes has limited effect (or, ideally, no effect) on the others.
1 I don't necessarily mean C# or Java interface types.