Repository pattern using IRepository implementations