2017-09-03 3 views
0

J'essaie un projet MVC avec un modèle de référentiel et une unité de travail.Impossible de convertir du référentiel en IRepository UOW Repository pattern

Ce qui suit est de mon InitOfWork

public interface IUnitOfWork 
{ 
    IRepository<User> UserRepository { get; } 
    void Save(); 
} 

ce qui est de UnitOfWork

public class UnitOfWork:IUnitOfWork, IDisposable 
{ 
    private JNContext context = new JNContext(); 
    private bool disposed = false; 


    private IRepository<User> userRepository; 
    public IRepository<User> UserRepository 
    { 
     get 
     { 
      if (this.userRepository == null) 
      { 
       this.userRepository = new Repository<User>(this.context); 
      } 

      return this.userRepository; 
     } 
    } 

    public void Save() 
    { 
     this.context.SaveChanges(); 
    }} 

La ligne suivante dans UnitOfWork génère l'erreur « Impossible de convertir implicitement à partir du référentiel à IRepository

this.userRepository = new Repository<User>(this.context); 

Qu'est-ce qui me manque? Je ne trouve pas de réponse et je suis coincé toute la journée.

+0

êtes-vous sûr que Repository implémente IRepository? – wheeler

+0

@wheeler: Non, ce n'était pas le cas. J'avais ** public class Repository où TEntity: class **. Dois-je implémenter ** IRepository **? Est-il possible avec Dependency Injection –

+0

Oui, vous devez implémenter 'IRepository'. dans 'Repository'. Le compilateur ne peut pas le comprendre sans cela. – RedgoodBreaker

Répondre

0

Essayez quelque chose comme ça

public interface IRepository<T> where T : class 
{ 
    IQueryable<T> Entities { get; } 
    void Remove(T entity); 
    void Add(T entity); 
} 
public class GenericRepository<T> : IRepository<T> where T : class 
{ 
    private readonly MyDbContext _dbContext; 
    private IDbSet<T> _dbSet => _dbContext.Set<T>(); 
    public IQueryable<T> Entities => _dbSet; 
    public GenericRepository(MyDbContext dbContext) 
    { 
     _dbContext = dbContext; 
    } 
    public void Remove(T entity) 
    { 
     _dbSet.Remove(entity); 
    } 
    public void Add(T entity) 
    { 
     _dbSet.Add(entity); 
    } 
} 

trouvé un bon article à ce sujet ici: https://medium.com/@utterbbq/c-unitofwork-and-repository-pattern-305cd8ecfa7a