Tworzenie generycznego repozytorium z użyciem Ninject

0

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 ?

2

Nie znam Ninject, ale trochę pogoglowałem, nie działa coś takiego?

ninjectKernel.Bind(typeof(IRepository<>)).To(typeof(Repository<>))

Zamiast wypisywać wszystkie możliwe generyki powinieneś móc jakoś to lepiej ogarnąć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1