2008-11-27 11 views
9

Przykłady, które można znaleźć, używają architektury dwuwarstwowej, w której kontrolery bezpośrednio korzystają z klas repozytorium w warstwie dostępu do danych. Zobacz here lub here.Jak używać Autofac w 3-warstwowej aplikacji sieciowej (ASP.NET MVC)?

Gdzie można rejestrować komponenty z warstwy dostępu do danych, jeśli warstwa usług lub warstwa logiki biznesowej używa tych składników? Warstwa dostępu do danych nie powinna być idealnie odniesiona z warstwy interfejsu użytkownika, prawda? Tak więc Application_Start nie byłby odpowiednim miejscem do tego.

Jaki byłby lepszy sposób?

Dziękujemy!

+0

Niestety nie mam odpowiedzi na twoje pytanie, ale link do tej aplikacji MVC Commerce, który podałeś, był bardzo pouczający i wnikliwy, dzięki. :) – Franck

Odpowiedz

7

Coś musi wiedzieć o implementacjach, których chcesz użyć. Jest zazwyczaj 3 sposoby, aby tego dokonać:

  1. w czasie kompilacji, która jest co wykorzystuje Autofac
  2. w czasie wykonywania z góry określonego pliku konfiguracyjnego, który Zamek Windsor może zrobić
  3. przy starcie z dyanamic configuartion

Dzięki Autofac masz kilka możliwości wyboru:

  1. Połącz wszystko razem w Application_Start
  2. Przekaż odpowiedzialność za inny komponent, który implementuje factory pattern i rejestruje wymagane komponenty.

Dla # 2 zaimplementowałbym coś w rodzaju interfejsu IContainer, aby twój framework IoC był luźno sprzężony z twoim systemem. Następnie zaimplementuj implementacje dostępu do danych za pomocą interfejsu, aby zarejestrować wymagane komponenty.

+0

OK, więc w pierwszym przypadku (wszystko w Application_Start) jest problem, że aplikacja internetowa musi teraz mieć bezpośrednie odniesienie do zespołu warstwy dostępu do danych? –

+0

Jeśli twoja nazwa_programu_wdrażania wie o twojej warstwie dostępu do danych, jest to problem, który zawsze możesz streścić implementację IoC za interfejsem i przenieść ją gdzie indziej. Wtedy decyzja o tym, co DAL zarejestrować, może być niepomna na twoją aplikację internetową. –

+2

Jeśli twój DAL nie znajduje się za usługą sieciową, twoja aplikacja internetowa będzie potrzebować dostępu do twojego zestawu DAL przez katalog bin lub GAC, nie? –

Powiązane problemy