J'ai lu beaucoup de messages sur des sujets similaires. J'ai un dépôt partielPartage de dbContext singleton à travers des dépôts en utilisant Ninject
public class EFPartRepository : IPartRepository
{
private ItemDBEntities dbContext = null;
public EFPartRepository(ItemDBEntities dbContext)
{
this.dbContext = dbContext;
}
}
Je vais utiliser un autre référentiel nommé référentiel d'images
public class EFUploadedImageRepository : IUploadedImageRepository
{
private ItemDBEntities dbContext = null;
public EFUploadedImageRepository(ItemDBEntities dbContext)
{
this.dbContext = dbContext;
}
}
Comme ils seront utilisés dans la même demande, je veux qu'ils partagent un singleton de dbContext lors d'une demande, il n'y aura donc aucune exception "Un objet d'entité ne peut pas être référencé par plusieurs instances de IEntityChangeTracker"
Voici mon code de régression Ninject d'origine.
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IPartRepository>().To<EFPartRepository>();
kernel.Bind<IUploadedImageRepository>().To<EFUploadedImageRepository>();
}
Ma question est, où est le meilleur endroit pour initialiser ce singleton, il peut être facilement utilisé par les différents référentiels au niveau mondial? Et comment le déclarer? (Le pire des cas est de toujours passer dbContext en paramètre lors de chaque appel).
Merci!
Merci beaucoup! Je vais essayer. Probablement je devrais avoir un conteneur dbContext, et le faire comme un singleton, partagé par tous les dépôts. Ce conteneur a un dbConext défini sur null initialement. Lorsqu'une requête arrive, le constructeur du contrôleur obtient un référentiel et crée le dbContext afin qu'il soit accessible à tous les dépôts depuis que le conteneur est partagé. Et il sera détruit une fois la demande terminée. – Chris
@Chris correct. – zaitsman