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

Foi útil?

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());
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top