2010-10-09 11 views
18

Im tratando de implementar un patrón de unidad de trabajo pasando una instancia de unidad de trabajo a mis repositorios.ASP.NET MVC, Ninject, instancia única por solicitud de múltiples constructores

Código relevante de Global.asax.

public class SiteModule : NinjectModule 
{ 
    public override void Load() {   
     Bind<IUnitOfWork>().To<SqlUnitOfWork>() 
          .InRequestScope() 
          .WithConstructorArgument("connectionString", ConfigurationManager.ConnectionStrings["Entities"].ConnectionString); 

     Bind<IProductRepository>().To<ProductRepository>(); 
     Bind<ICategoryRepository>().To<CategoryRepository>(); 
    } 
} 


constructores repositorio:

public class ProductRepository { 
    IUnitOfWork unitOfWork; 
    public ProductRepository(IUnitOfWork unitOfWork) { 
     this.unitOfWork = unitOfWork; 
    } 
} 

public class CategoryRepository { 
    IUnitOfWork unitOfWork; 
    public CategoryRepository(IUnitOfWork unitOfWork) { 
     this.unitOfWork = unitOfWork; 
    } 
} 


Lo que quiero es que un máximo de 1 instancia de SqlUnitOfWork es creado por la petición y se pasa en mis repositorios (a través de sus respectivos constructores).

¿Es el método InRequestScope() en el IUnitOfWork lo suficientemente vinculante? Si no, ¿cómo puedo lograr esto?

+3

Sí lo es. Solo se dará una instancia de 'IUnitOfWork' a cualquier clase que lo solicite (mediante inyección de constructor o llamadas al' .Get '> del núcleo) – Omar

+1

estamos usando el mismo patrón que usted (excepto que usamos structuremap para DI). El nuestro se ve un poco diferente. Actualizamos un sqlcontext por httprequest, no un UoW. Una solicitud puede tener múltiples UoW. – RPM1984

+1

Baddie: agrega tu comentario como respuesta para que pueda ser votado y aceptado. –

Respuesta

8

El código que tiene funcionará bien. Solo se dará una instancia de IUnitOfWork a cualquier clase que lo solicite (a través de la inyección de constructor/propiedad o llamadas a .Get<> del núcleo, etc.)

Cuestiones relacionadas