У меня есть решение MVC3, где у меня есть 2 хранилища и 2 уровня обслуживания. У меня также есть отдельный каждый слой: controller <-> service <-> хранилище
Раньше в каждом из моих репозиториев у меня был отдельный контекст данных. Я имею в виду, я создал новый экземпляр объекта в каждом хранилище. Я знал , что это не очень хороший способ .
Итак, я реорганизовал свое решение, чтобы разделить мой контекст данных между моими репозиториями. Ниже приведен скелет моего решения. Мне бы хотелось ваше мнение.
public class EntityFrameworkDbContext: DbContext, IUnitOfWork
{
public DbSet<Project> Projects { get; set; }
public DbSet<Technology> Technologies { get; set; }
public void Save()
{
SaveChanges();
}
}
public interface IUnitOfWork
{
void Save();
}
Привязки nInject
ninjectKernel.Bind<IUnitOfWork>().To<EntityFrameworkDbContext>().InRequestScope();
ninjectKernel.Bind<IMainRepository>().To<MainRepository>();
ninjectKernel.Bind<IAdminRepository>().To<AdminRepository>();
ninjectKernel.Bind<IMainService>().To<MainService>();
ninjectKernel.Bind<IAdminService>().To<AdminService>();
Контроллер
public class AdminController : Controller
{
private IMainService m_MainService;
private IAdminService m_AdminService;
public AdminController(IMainService mainService, IAdminService adminService)
{
m_MainService = mainService;
m_AdminService = adminService;
}
...
}
Услуги
public class MainService : IMainService
{
private IMainRepository m_Repository;
public MainService(IMainRepository repository)
{
m_Repository = repository;
}
...
}
Репозиторий
public class AdminRepository : IAdminRepository
{
private EntityFrameworkDbContext m_Context;
public AdminRepository(IUnitOfWork unitOfWork)
{
if (unitOfWork == null)
throw new ArgumentNullException("unitOfWork");
m_Context = unitOfWork as EntityFrameworkDbContext;
}
...
}
Как видите, я реализую шаблон «Единица работы», но не знаю, насколько это хороший подход.
Спасибо.