C#, .NET Framework 4.5.1, Entity Framework 6.1.1 및 최신 ASP.NET MVC 5 웹 API 응용 프로그램을 개발하고 있습니다. Ninject의 버전 (Ninject.MVC5도 설치했습니다).InRequestScope()를 사용하는 경우 DBContext.SaveChanges()를 호출합니다.
종속성 주입을 구현하는 방법을 배우고 있습니다. 배운 것 같지만 질문이 있습니다. 이것들은 제 인터페이스와 클래스입니다. 작업 인터페이스의
단위 :
public interface IUnitOfWork
{
void Commit();
}
사용자 정의 DbContext
구현 (나는 DI 수 있도록 IUnitOfWork
인터페이스를 사용) :
public class EFDbContext : DbContext, IUnitOfWork
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
[ ... ]
}
public void Commit()
{
this.SaveChanges();
}
}
는 그리고 이것은 Ninject에와 Ninject.Web와 의존성 삽입을 허용하는 방법이다. 공유지.
나는 바인딩을 추가하는 클래스, NinjectConfigurator
가지고 :
public class NinjectConfigurator
{
public void Configure(IKernel container)
{
// Add all bindings/dependencies
AddBindings(container);
// Use the container and our NinjectDependencyResolver as
// application's resolver
var resolver = new NinjectDependencyResolver(container);
GlobalConfiguration.Configuration.DependencyResolver = resolver;
}
private void AddBindings(IKernel container)
{
ConfigureLog4net(container);
container.Bind<IUnitOfWork>().To<EFDbContext>().InRequestScope();
container.Bind<IGenericRepository<User>>().To<GenericRepository<User>>();
}
private void ConfigureLog4net(IKernel container)
{
log4net.Config.XmlConfigurator.Configure();
var loggerForWebSite = LogManager.GetLogger("MattSocialNetworkWebApi");
container.Bind<ILog>().ToConstant(loggerForWebSite);
}
}
을 그리고 마지막으로, 나는 NinjectWebCommon
에 있습니다
/// <summary>
/// Load your modules or register your services here!
/// </summary>
/// <param name="kernel">The kernel.</param>
private static void RegisterServices(IKernel kernel)
{
var containerConfigurator = new NinjectConfigurator();
containerConfigurator.Configure(kernel);
}
내가 .InRequestScope()
을 사용하여 I 요청 당 EFDbContext
인스턴스를 원하기 때문에.
내 질문은 : 언제해야합니까? EFDbContext.SaveChanges()
? 요청 당 하나의 인스턴스를 사용하고 있다면 요청이 끝날 때 변경 사항을 저장해야한다고 생각합니까?
어디서 EFDbContext.Commit()
을 넣어야합니까?
질문에 대한 답변은 [이 Stackoverflow 답변] (https://stackoverflow.com/a/10588594/264697) 안에 묻혀 있습니다. – Steven