Use dependency injector / inversion of control structure, for example:
- Ninject
- Autofac
- Structuremap
- Unity
Using the IoC container, you can specify how to manage a single data context (most often for each request). When you set the data context for each request, the container automatically sets up any class that needs the data context, the same data context for each request.
Here is a good article on configuring Ninject.
Most likely, your code will look if you use a common repository:
Ninject module:
public class NinjectRegistrationModule : NinjectModule { public override void Load() { Bind<MyDataContext>().ToSelf().InRequestScope(); Bind(typeof(RepositoryImplementation<>)).ToSelf().InRequestScope(); } }
General repository:
public RepositoryImplementation<T> : IRepository<T> where T : class { MyDataContext _dataContext; public RepositoryImplementation<T>(MyDataContext dataContext) { _dataContext = dataContext; }
Class of service:
public class MyServiceClass { IRepository<SomeEntity> _someEntityRepository; public MyServiceClass(IRepository<SomeEntity> someEntityRepository) { _someEntityRepository = someEntityRepository; }
Controller:
public class MyController { MyServiceClass _myServiceClass; public MyController(MyServiceClass myServiceClass) {
Omar
source share