我有一个基础存储库类,它包含所有常见的存储库方法(通用):
public abstract class BaseRepository<T, IdType> : IBaseRepository<T, IdType>
我的存储库来自这个基地,例如:
public class UserRepository : BaseRepository<User, int>, IUserRepository
我还有一个包含常见操作的基本控制器类,并在控制器中继承此操作。存储库由DI注入其中。 E.g。
public class UserController : BaseController<User>
{
private readonly IUserRepository userRepository;
public UserController (IUserRepository userRepository)
{
this.userRepository= userRepository;
}
我的问题是:基本控制器需要能够访问基本存储库中定义的存储库方法。但是,我通过DI为每个控制器传递了一个不同的存储库类型(即使它们都从基础存储库继承)。基本控制器如何以某种方式访问传入的存储库(无论它是什么类型),以便它可以访问公共基本方法?
答案 0 :(得分:1)
您可以在BaseReposiroty
BaseController
的引用
public class BaseController <T, IdType>
{
...
...
protected BaseRepository<T, IdType> Reposirory
{
{ get; set; }
}
...
...
}
答案 1 :(得分:1)
您的所有存储库都将从IBaseRepository<T,IdType>
派生,然后具有:
interface IUserRepository : IBaseRepository<User,int> {...}
现在,对IUserRepository
的任何引用都会了解IBaseRepository<>
成员,而不必提及UserRepository
类或BaseRepository<>
类等具体类型。
答案 2 :(得分:1)
这是一种方法..
public abstract class BaseController<TEntity, TRepository, TIdType>
where TEntity : class, new()
where TRepository : IBaseRepository<TEntity, TIdType>
{
protected TRepository Repository = RepositiryFactory.GetRepository<TEntity, TRepository>();
public IList<TEntity> GetAll()
{
return Repository.GetAll().ToList();
}
public IList<TEntity> GetAll(string sortExpression)
{
return Repository.GetAll(sortExpression).ToList();
}
public int GetCount()
{
return Repository.GetAll().Count();
}
public IList<TEntity> GetAll(int startRowIndex, int maximumRows)
{
var results = Repository.GetAll().Skip(startRowIndex).Take(maximumRows);
return results.ToList();
}
public IList<TEntity> GetAll(string sortExpression, int startRowIndex, int maximumRows)
{
var results = Repository.GetAll(sortExpression).Skip(startRowIndex).Take(maximumRows);
return results.ToList();
}
}