2010-03-09 9 views
6

nikt kochał moje pierwsze pytanie na ten temat: Creating Entity Framework objects with Unity for Unit of Work/Repository patternUnity framework - ponowne instancję

więc udało mi się go przeformułować coś można przeczytać bez zasypiania/utraty chęci do życia.

tworzę obiekt, DataAccessLayer, że trwa 2 interfejsów w konstruktora: IUnitOfWork i IRealtimeRepository:

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

Teraz konstruktor dla realizacji IRealtimeRepository bierze również parametr IUnitOfWork:

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

W konfiguracji kontenera Unity, I następnie dodać dwie implementacje:

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

co się dzieje, że jedność tworzy 2 nowe instancje IUnitOfWork (faktycznie kontekście danych Entity Framework), po jednym dla konstruktora DataAccessLayer, jeden dla DemoRepository konstruktora

gdyż jest to dla Zakładu wzór pracy, to bardzo ważne ta sama instancja jest ponownie używana. Jakieś pomysły? Widzę podobne pytania były zadawane przed, ale nie przyjął

Odpowiedz

6

Można powiedzieć Jedności używanie ContainerControlledLifetimeManager:

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

Alternatywnie można użyć RegisterInstance zamiast RegisterType, choć trzeba go utworzyć w czasie rejestracji:

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

c'est magnifique! Merci monsieur! – TobyEvans

+0

Moja przyjemność - można by pomyśleć, że dokumentacja może gdzieś wspominać o singletonie, prawda? :) –