2013-05-01 13 views
13

Moja podstawowa konfiguracja jest bardzo podobna do tej; http://visualstudiomagazine.com/articles/2011/10/01/wpf-and-inversion-of-control.aspxCzas pracy UnitOfWork w WPF przy użyciu kontenera IoC

Konfiguracja MVVM w WPF. Wstrzykuję UnitOfWork i RepositoryFactory do ViewModel. To zadziałało dobrze w przypadku dialogów, które napisałem do tej pory ... Jednak duże porcje naszej aplikacji znajdują się w dokowalnych oknach (pomyśl o Visual Studio UI). Są one otwarte tak długo, jak aplikacja jest.

Tak więc moją myślą jest przeniesienie jednostkowej pracy z życia okna dialogowego do czasu trwania wywołania metody (Button.Click() na przykład).

Ale nie wymyśliłem dobrego sposobu robienia tego, co nie narusza niektórych korzyści, jakie uzyskuję z używania Castle Windsor jako kontenera IoC i/lub nie podążania za DRY.

To wydaje się całkiem niezłe ... http://www.codeproject.com/Articles/543810/Dependency-Injection-and-Unit-Of-Work-using-Castle Ale martwię się, że sesja jest opakowana w pół-singleton i martwię się, że mogę strzelać sobie w stopę, usuwając bezpośredni dostęp do UnitOfWork.

Ktoś ma dobre rozwiązanie? Czy powyższy kodeks jest dobry, a jeśli nie, to jakie są jego wady?

+0

Witam Fenyx, staram się nie używać wyraźnego użycia pracy, ale raczej używać ISession (NHibernate) lub DbContext (EF) bezpośrednio. Żywotność tych elementów jest powiązana z modelami widokowymi, nawet jeśli mają one czas życia aplikacji. Tak długo, jak te widoki nie gromadzą coraz więcej danych z bazy danych, nie widzę problemu. Należy pamiętać, że DbContext/ISession to nie to samo, co połączenie z bazą danych. – Marwijn

+0

Bez zbytniego mówienia, sprawdź to [pytanie] [1]. [1]: http://stackoverflow.com/questions/3653009/entity-framework-and-connection-pooling –

+0

@Sniffer to '[link caption] (URL)';) –

Odpowiedz

3

Wystarczy wprowadzić jednostkę pracy Fabryka (na przykład, IUnitOfWorkFactory) i używać jej w razie potrzeby (wstrzyknąć itp.).

Należy również rozważyć utworzenie interfejsu IUnitOfWork odziedziczonego po interfejsie IDisposable.

Powiązane problemy