Od kilku dni myślę nad repozytorium Entity Framework, obecnie w aplikacji mam już repozytorium dla jednej klasy z którego korzystam przez ninject.
Potrzebowałem zrobić sobie kolejne repozytorium które już nie korzystało z ninject:
Repository<T> where T:class
i po tym repozytorium dziedziczyły klasy
public class ServiceRepository: Repository<Service>
no ale zacząłem dalej się zastanawiać czy można zrobić to lepiej. No i pomyślałem że moje nowe repozytorium fajnie byłoby połączyć ze starym żeby cały czas nie powtarzać kodu no i żeby było wygodniej.
Wymyśliłem coś takiego:
public class NinjectControllerFactory : DefaultControllerFactory
{
//(...)
public void AddBindings()
{
ninjectKernel.Bind<IRepository<VisitDetails>>().To<Repository<VisitDetails>>();
ninjectKernel.Bind<IRepository<Service>>().To<Repository<Service>>();
}
}
public interface IRepository<T>
{
List<T> GetAll { get; }
void Add(T entity);
}
public class Repository<T> :IRepository<T> where T: class
{
protected DbSet<T> DbSet { get; set; }
private RepositoryContext context = new RepositoryContext();
public Repository()
{
DbSet = context.Set<T>();
}
public List<T> GetAll
{
get { return DbSet.ToList(); }
}
public void Add(T entity)
{
DbSet.Add(entity);
}
}
public class BookVisitController : Controller
{
private IRepository<Service> serviceRepository;
private IRepository<VisitDetails> detailsRepository;
public BookVisitController(IRepository<Service> serviceRepo, IRepository<VisitDetails> detailsRepo)
{
serviceRepository = serviceRepo;
detailsRepository = detailsRepo;
}
//(...)
Mam nadzieje że rozumiecie o co mi chodzi.. Czy takie coś jest poprawne, można zrobić to jakoś inaczej/lepiej ?