quadro Unity - reutilizando instância
-
18-09-2019 - |
Pergunta
ninguém amava minha primeira pergunta sobre isso: Criando Entity Framework objetos com a Unidade para a Unidade de Trabalho / padrão Repository
então eu consegui reformulá-la a algo que você pode ler sem cair no sono / perder a vontade de viver.
Estou criando um objeto, DataAccessLayer, que leva 2 interfaces no construtor: IUnitOfWork e IRealtimeRepository:
public DataAccessLayer(IUnitOfWork unitOfWork,
IRealtimeRepository realTimeRepository)
{
this.unitOfWork = unitOfWork;
this.realTimeRepository = realTimeRepository;
}
Agora, o construtor para a implementação de IRealtimeRepository também leva um parâmetro IUnitOfWork:
public DemoRepository(IUnitOfWork unitOfWork)
{
this.unitOfWork = unitOfWork;
}
Na configuração contêiner Unity, eu, em seguida, adicione as duas implementações:
container.RegisterType<IUnitOfWork, communergyEntities>();
container.RegisterType<IRealtimeRepository, DemoRepository>();
O que acontece é que a Unidade cria 2 novos casos de IUnitOfWork (na verdade um contexto de dados Entity Framework), um para o construtor DataAccessLayer, um para o DemoRepository construtor
Como este é para a Unidade de padrão de trabalho, é muito importante que a mesma instância é reutilizado. Alguma ideia? Eu vejo perguntas semelhantes foram feitas antes, mas não aceita ??p>
Solução
Você pode dizer Unidade usar um ContainerControlledLifetimeManager :
container.RegisterType<IUnitOfWork, communergyEntities>(new ContainerControlledLifetimeManager());
Como alternativa, você pode usar RegisterInstance
em vez de RegisterType
, embora você tem que criá-lo no momento da registro:
container.RegisterInstance<IUnitOfWork>(new CommunergyEntities());