3

엔티티 프레임 워크에서 UnitOfWork Pattern을 사용하여 벨로우즈 코드를 사용하여 DbContext를 노출합니다. 그래서 제 질문은 Ninject와 함께 Context 인스턴스를 얻는 것이 가능한가?Ninject를 통해 UnitOfWork 내에서 DbContext 인스턴스를 얻는 방법?

IUnitOfWork

public interface IUnitOfWork<C> : IDisposable 
{ 
     int Commit(); 
     C GetContext { get; set; } 
} 

의 UnitOfWork 내 지금

public class UnitOfWork<C> : IUnitOfWork<C> where C : DbContext 
    { 
     private bool _disposed; 
     private readonly C _dbContext = null; 

     public UnitOfWork() 
     { 
      GetContext = _dbContext ?? Activator.CreateInstance<C>(); 
     } 

     public int Commit() 
     { 
      return GetContext.SaveChanges(); 
     } 


     public C GetContext 
     { 
      get; 
      set; 
     } 
[...] 

NinjectWebCommon

private static void RegisterServices(IKernel kernel) 
{ 
    kernel.Bind<IUnitOfWork<MyDbContext>>().To<UnitOfWork<MyDbContext>>().InRequestScope(); 
    kernel.Bind<IEmployeeRepository>().To<EmployeeRepository>(); 
} 

W _dbContext ?? Activator.CreateInstance<C>();을 사용하지 않고 DbContext 인스턴스를 통해 Ninject을 얻을 수 있습니까?

+0

Ninject에 DI 구성

kernel.Bind<MyDbContext>().ToSelf().InRequestScope(); kernel.Bind<IUnitOfWork<MyDbContext>>().To<UnitOfWork<MyDbContext>>(); kernel.Bind<IEmployeeRepository>().To<EmployeeRepository>(); 

그리고 울부 짖는 솔루션을 확인? – jrummell

+0

'커널 .Bind () .ToSelf(). InRequestScope();'할 수 있습니까? 하지만 UnitOfWork 내의 코드는 무엇이 될까요? –

+0

나는 Ninject에 익숙하지 않지만'C' 매개 변수를 허용하는 생성자를 추가 할 수 있다고 가정합니다 :'Public UnitOfWork (C context)'. – jrummell

답변

3

예 가능합니다. 당신이 생성자 분사를 시도 의 UnitOfWork

public class UnitOfWork<C> : IUnitOfWork<C> where C : DbContext 
    { 
     private readonly C _dbcontext; 

     public UnitOfWork(C dbcontext) 
     { 
      _dbcontext = dbcontext; 
     } 

     public int Commit() 
     { 
      return _dbcontext.SaveChanges(); 
     } 

     public C GetContext 
     { 
      get 
      { 
       return _dbcontext; 
      } 

     } 
[...] 
관련 문제