18

Je tente d'implémenter un modèle d'unité de travail en passant une instance d'unité de travail dans mes référentiels.ASP.NET MVC, Ninject, instance unique par requête pour plusieurs constructeurs

Code pertinent 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>(); 
    } 
} 


constructeurs dépôt:

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

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


Ce que je veux qu'un maximum de 1 instance de SqlUnitOfWork est créé par demande et est passé dans mes dépôts (via leurs constructeurs respectifs).

La méthode InRequestScope() sur la IUnitOfWork est-elle suffisante? Si non, comment puis-je y parvenir?

+3

Oui, ça l'est. Une seule instance de 'IUnitOfWork' sera donnée à n'importe quelle classe qui le demande (via l'injection du constructeur ou les appels au' .Get <> 'du noyau.) – Omar

+1

nous utilisons le même modèle que vous (sauf que nous utilisons structuremap pour DI). La nôtre est légèrement différente. Nous ajoutons un sqlcontext par requête http, pas un document. Une demande peut avoir plusieurs UoW. – RPM1984

+1

Baddie - ajoutez un commentaire en réponse afin qu'il puisse être sur la hauteur et accepté. –

Répondre

8

Le code que vous avez fonctionnera correctement. Une seule instance de IUnitOfWork sera donnée à n'importe quelle classe qui le demande (via un constructeur/une injection de propriété ou des appels au .Get<> du noyau, etc.)

Questions connexes