Making a web service call based on a type of request
It would be better to give the Irequest interface an additional "Name" property that returns the value of requestType. Than you can iterate over all Irequest implementations and get the first with the corresponding name ;).

Example:

interface IRequest
{
    void CallService();
    string Name { get; }
}
class EnrolmentRequest : IRequest
{
    public void CallService() { /* impl. */ }
    public string Name =&gt; "Enrol";

}
class ReEnrolmentRequest : IRequest
{
    public void CallService() { /* impl. */ }
    public string Name =&gt; "ReEnrol";
}

...

public class Client
{
    private static IRequest[] requestHandlers = new IRequest[] 
    {
        new EnrolmentRequest(),
        new ReEnrolmentRequest(),
        ...
    }

    public Client(string requestType)
    {
        IRequest request = requestHandlers.SingleOrDefault(x =&gt; x.Name == requestType);
        if (request == null) { /* Handle null case */ }

        request.CallService();
    }    
}


That code fulfills the open/closed principle because you can add new request handlers without modified existing logic.