Pregunta

nadie quería a mi primera pregunta acerca de esto: Creación de objetos Marco de la entidad con la Unidad para la Unidad de trabajo / patrón Repositorio

por lo que he logrado reformular a algo que se puede leer sin quedarse dormido / perder la voluntad de vivir.

Estoy creando un objeto, DataAccessLayer, que tiene 2 interfaces en el constructor: IUnitOfWork y IRealtimeRepository:

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

Ahora, el constructor para la ejecución de IRealtimeRepository también toma un parámetro IUnitOfWork:

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

En la configuración del contenedor de la unidad, que a continuación, añadir las dos implementaciones:

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

lo que pasa es que la unión hace 2 nuevos casos de IUnitOfWork (en realidad un contexto de datos de Entity Framework), uno para el constructor DataAccessLayer, uno para el constructor DemoRepository

A medida que esto es para la Unidad de los ritmos de trabajo, es muy importante que la misma instancia se reutiliza. ¿Algunas ideas? Veo preguntas similares se han preguntado antes, pero no aceptados

¿Fue útil?

Solución

Se puede decir que la Unidad de utilizar un ContainerControlledLifetimeManager :

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

Como alternativa se puede utilizar RegisterInstance en lugar de RegisterType , aunque tienes que crearlo en el momento de inscripción:

container.RegisterInstance<IUnitOfWork>(new CommunergyEntities());
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top