8

Mam swój projekt, który używa zwykłego wzorca Repozytorium z Usługami i Jednostką Pracy (wszystkie z Ninject wstrzykuje zależności od NinjectModule), ale próbuję uzyskać dostęp do usługi od ActionFilterAttribute wstrzyknąć pewne informacje (z DB) w układ stron, które pokazuję, więc nie muszę zadzierać ze wszystkimi działaniami na każdym kontrolerze.Akcja ActionFilterAttribute wstrzyknięcia - DbContext został usunięty

Problem pojawia się, gdy mogę zapisać do DB na jednym ekranie i przejść do następnego, a następnie wrócić do poprzedniego (ze standardowym @Url.Action): the ActionFilterAttribute dla działania Index jest wyzwalany ale wywołanie usługi i odpowiadający repozytorium (w ramach atrybutu) zgłasza wyjątek, ponieważ DbContext has been disposed.

Czy jest jakiś problem z uzyskaniem dostępu do usługi i, w konsekwencji, DbContext z ActionFilterAttribute podczas wstrzykiwania usługi za pośrednictwem funkcji wprowadzania właściwości? Chcę zanotować, że używam wtrysku właściwości dla usługi w atrybucie, ponieważ konstruktor otrzymuje 2 parametry, które są arbitralne w zależności od podpisu metod działania, więc moją jedyną opcją było wstrzyknięcie przez właściwość.

Daj mi znać, jeśli potrzebujesz kodu, a ja zaktualizuję pytanie.

+0

Dodaj proszę kod. –

+0

Kontekst bazy danych i wszystkie miejsca, w które ma zostać wstrzyknięty, muszą zostać poddane inrequestscope (lub krótszemu zakresowi) –

Odpowiedz

3

znalazłem rozwiązania mojego problemu na następujące pytanie: Injecting dependencies into ASP.NET MVC 3 action filters. What's wrong with this approach?

Łączenie Mark Seeman „s odpowiedź z striplingwarrior” s komentarz został rozwiązanie do niego.

Zasadniczo podzieliłem moją Akcja ActionFilterAttribute na Atrybut, który jedynie udekorował moje Akcje i zachował parametry, których potrzebuję na później, a także do AkcjiFiltru, która sprawdzała niestandardowe atrybuty Akcji i jeśli mój atrybut istnieje, to wstrzykuje dane, które chciałem od DB do ViewBag. Wszystko jest później wiązane z rozszerzeniem BindFilter od Ninject, więc odnosi się tylko do potrzebnych metod.

Powiązane problemy