在我的特定存储库类(例如CollectionRepository)中,我继承了通用基类(BaseRepository),并在构造函数中使用了应该注入的基本UnitOfWork。但是我无法访问任何BaseRepository继承的方法。
完全没有想法,任何帮助都将不胜感激。
下面是一些代码来说明我的问题:
我的控制器注入了存储库。
public readonly ICollectionRepository _collectionRepository;
public HomeController(ICollectionRepository collectionRepository, IRepository<Collection> repository)
{
_collectionRepository = collectionRepository;
}
public ActionResult Index()
{
_collectionRepository. //Here i only get the ICollectionRepositoryMethods
return View(new List<Note>());
}
我的基础存储库:
public class BaseRepository<T> : IRepository<T> where T : IAggregateRoot
{
public readonly IUnitOfWork _unitOfWork;
public BaseRepository(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}
public BaseRepository()
{}
public void Save(T Entity)
{
_unitOfWork.Session.Save(Entity);
}
}
继承了基础的特定存储库类。
public class CollectionRepository : BaseRepository<Collection>, ICollectionRepository
{
public CollectionRepository(IUnitOfWork unitOfWork) : base(unitOfWork)
{
}
public IList<Collection> GetTodaysCollections()
{
throw new System.NotImplementedException();
}
}
我正在使用structuremap配置CollectionRepository,不确定这是否正确:
For<ICollectionRepository>().Use<CollectionRepository>();
答案 0 :(得分:1)
您可以为ICollectionRepository实现的BaseRepository引入一个接口。
这将使处理ICollectionRepository的任何事情都知道BaseRepository方法。
public interface IBaseRepository<T>
{
void Save(T Entity);
}
和BaseRepository实现:
public class BaseRepository<T> : IBaseRepository<T>, IRepository<T> where T : IAggregateRoot
现在,当ICollectionRepository
实现该接口时,反过来实现ICollectionRepository
的所有类也会实现IBaseRepository
。
public ICollectionRepository<T> : IBaseRepository<T>
{
//ICollectionRepository methods go here...
}
因为CollectionRepository
继承自实现BaseRepository
接口的IBaseRepository
,所以您已满足要求,现在可以调用基类方法。