Já pensou em fazer uma classe abstrata que tenha os métodos CRUD e que esses métodos recebam parâmetros abstratos/interfaces e dentro desses métodos tenha uma factory que direcione o repositório ou serviço a ser chamado/executado? Apenas dei uma ideia, mas com certeza dá pra trabalhar em cima disso e melhorar conforme o desejado

Ja tentei, mas não deu certo