2010-03-09 10 views
6

niemand liebte meine erste Frage über diese Wiederverwendung: Creating Entity Framework objects with Unity for Unit of Work/Repository patternRahmen Unity - Instanz

so habe ich es geschafft, es zu etwas umformulieren Sie ohne einzuschlafen/verlieren den Willen zum Leben lesen kann.

Ich bin ein Objekt erstellen, DataAccessLayer, die zwei Schnittstellen im Konstruktor: IUnitOfWork und IRealtimeRepository:

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

Nun wird der Konstruktor für die Implementierung von IRealtimeRepository nimmt auch einen IUnitOfWork Parameter:

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

im Unity Container-Setup, ich die beiden Implementierungen dann hinzu:

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

, was passiert ist, dass Unity 2 neue Instanzen von IUnitOfWork erstellt (eigentlich ein Datum Entity Framework Kontext), ein für den DataAccessLayer Konstruktor, ein für den DemoRepository Konstruktor

Da dies für die Einheit des Arbeitsmusters ist, ist es ziemlich wichtig, dass dieselbe Instanz wiederverwendet wird. Irgendwelche Ideen? Ich sehe ähnliche Fragen vor gefragt worden, aber nicht

Antwort

6

akzeptieren Sie Unity sagen kann, ein verwenden ContainerControlledLifetimeManager:

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

Alternativ können Sie RegisterInstance statt RegisterType verwenden, wenn Sie es an der Zeit zu schaffen haben der Registrierung:

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

c'est magnifique! Merci Monsieur! – TobyEvans

+0

Mein Vergnügen - Sie würden denken, dass die Dokumentation irgendwo Singleton erwähnen würde, nicht wahr? :) –

Verwandte Themen