marco de la unidad - ejemplo reutilización
-
18-09-2019 - |
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
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());