Question

personne a aimé ma première question à ce sujet: Création d'objets Entity Framework avec l'unité pour l'unité de travail / modèle référentiel

donc je suis parvenu à la reformuler à quelque chose que vous pouvez lire sans se endormir / perdre la volonté de vivre.

Je crée un objet, DataAccessLayer, qui prend 2 interfaces dans le constructeur: IUnitOfWork et IRealtimeRepository:

public DataAccessLayer(IUnitOfWork unitOfWork,
                       IRealtimeRepository realTimeRepository)
{
    this.unitOfWork = unitOfWork;
    this.realTimeRepository = realTimeRepository;
}

Maintenant, le constructeur pour la mise en œuvre de IRealtimeRepository prend également un paramètre IUnitOfWork:

public DemoRepository(IUnitOfWork unitOfWork)
{
    this.unitOfWork = unitOfWork;
}

Dans la configuration du conteneur de l'unité, je puis ajouter les deux implémentations:

container.RegisterType<IUnitOfWork, communergyEntities>();
container.RegisterType<IRealtimeRepository, DemoRepository>();

ce qui se passe est que l'unité crée 2 nouveaux cas de IUnitOfWork (en fait un de contexte de données Entity Framework), un pour le constructeur DataAccessLayer, un pour le constructeur DemoRepository

Comme cela est pour l'unité de modèle de travail, il est assez important qui est réutilisé la même instance. Des idées? Je vois des questions similaires ont déjà été posées, mais pas accepté

Était-ce utile?

La solution

Vous pouvez dire l'unité d'utiliser un ContainerControlledLifetimeManager :

container.RegisterType<IUnitOfWork, communergyEntities>(new ContainerControlledLifetimeManager());

vous pouvez utiliser alternativement RegisterInstance au lieu de RegisterType , si vous devez créer au moment de inscription:

container.RegisterInstance<IUnitOfWork>(new CommunergyEntities());
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top