2010-03-09 8 views
6

nadie quería a mi primera pregunta acerca de esto: Creating Entity Framework objects with Unity for Unit of Work/Repository patternmarco de la Unidad - reutilización ejemplo

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 sucede es que la Unidad crea 2 nuevos casos de IUnitOfWork (en realidad un contexto de datos de Entity Framework), uno para el constructor DataAccessLayer, uno para el constructor DemoRepository

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

Respuesta

6

Se puede decir que la Unidad de utilizar un ContainerControlledLifetimeManager:

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

Alternativamente se puede utilizar RegisterInstance en lugar de RegisterType, aunque tienes que crearlo en el momento de registro:

container.RegisterInstance<IUnitOfWork>(new CommunergyEntities()); 
+0

c'est magnifique! Merci monsieur! – TobyEvans

+0

Es un placer, pensarías que la documentación podría mencionar singleton en alguna parte, ¿no? :) –

Cuestiones relacionadas