Sto sviluppando un progetto integrato con Dependency Injection (solo per riferimento, sto usando Unity).
Il problema è che ho alcune classi Manager con diversi metodi e in molti casi ho delle dipendenze usate solo in un metodo.
public class UserReportManager : IUserManager
{
private UserRepository UserRepository {get;set;}
private TeamRepository TeamRepository {get;set;}
private CacheRepository CacheRepository {get;set;}
private WorkgroupRepository WorkgroupRepository {get;set;}
public UserManager(UserRepository userRepository,
TeamRepository teamRepository,
CacheRepository cacheRepository ,
WorkgroupRepository workgroupRepository,
... // Many other dependencies
)
{
UserRepository = userRepository;
TeamRepository = teamRepository;
CacheRepository = cacheRepository ;
WorkgroupRepository = workgroupRepository;
... // Setting the remaining dependencies
}
public void CreateReportAboutMostActivesUsers(){
// Uses only UserRepository
}
public void CreateReportAboutUserInsideTeams(int teamID){
// Uses UserRepository and TeamRepository
}
public void CreateReportAboutUserHistory(){
// Uses UserRepository and CacheRepository
}
public void CreateReportAboutUsersInsideWorkgroup(int workgroupID){
// Uses UserRepository and WorkgroupRepository
}
}
L'UserManager è istanziato in questo modo:
DependencyFactory.Resolve<IUserManager>();
Nota: DependencyFactory è solo un wrapper per semplificare l'accesso a UnityContainer
È corretto avere classi del genere nell'esempio? C'è un modo migliore per implementare evitando di istanziare tutte le dipendenze non necessarie?