La nostra classe "unità di lavoro" ha un metodo che accetta un tipo di classe e crea un repository:
public IRepository<TEntity> GetRepository<TEntity>() where TEntity : class
{
var repoItem = _repositoryList.FirstOrDefault(cv => cv.GetType().IsGenericType && cv.GetType().GetGenericArguments()[0] == typeof(TEntity));
if (repoItem == null)
{
repoItem = new Repository<TEntity, object>(Context);
_repositoryList.Add(repoItem);
}
return repoItem as IRepository<TEntity>;
}
Per me, sembra molto strano perché l'unità di lavoro non è DI.
Ho cercato di spiegarlo al mio team, ma dicono sempre "tutti gli esempi di unità di lavoro contengono classi concrete o proprietà / metodi che possono creare e restituire repository".
Ma la mia opinione su una "unità di lavoro" è, dovrebbe sapere solo quali repository esistono, e quando chiamo Savechanges
, dovrebbe salvare le entità in tutti questi repository.
Ora i nostri fornitori di servizi accettano solo UnitOfWork
, ma la mia opinione è che dovrebbe prendere anche le interfacce del repository. Perché UnitOfWork non dovrebbe essere una classe di Dio che può fare qualsiasi cosa.
Hai qualche buona spiegazione del perché è sbagliato \ giusto?