Mam mały problem, zastanawiając się, jak skonfigurować kontener Unity IoC w mojej n-warstwowej aplikacji ASP .net MVC.
Mam 3 projekty w moim rozwiązaniu: 1 MVC (używany jako widok): posiada referene tylko do warstwy logiki biznesowej 2. Warstwa logiki biznesowej: Ma odniesienie tylko do projektu repozytorium 3. Repozytorium: Nie należy odwoływać się do żadnego z powyższych projektów
Proszę zwrócić uwagę na sposób, w jaki działa moja referencja, zrobiłem to tak, że będę mógł zastąpić komunikację między moimi warstwami za pomocą WCF z mniejszymi trudnościami.
Skonfigurowałem kontener Unity w mojej aplikacji MVC wykonując coś takiego (Global.asax):
container.RegisterType (); // MyService jest w mojej warstwie logiki biznesowej
Klasa MyService używa mojego repozytorium w swoim konstruktorze, co oznacza, że gdy tworzona jest jedna z tych klas MyService, wymagane jest także MojeRepozytorium:
public MyService (repozytorium IRepository): base (repozytorium) {}
Jak widać nadal nie skonfigurowałem IRepository w moim kontenerze.
Nie chcę tego robić w moim Global.asax, ponieważ nie chcę dodawać żadnych odniesień do repozytorium do warstwy MVC (View).
Gdzie jest najlepsze miejsce, aby to skonfigurować? Jestem tu trochę zmieszany ....
Z góry dziękuję.
Odpowiedzi:
2 dla odpowiedzi № 1Czy próbowałeś: http://mvcunity.codeplex.com/
1 dla odpowiedzi nr 2
Pozwólcie, że powiem wam, co dotychczas zrobiłem:
Stworzyłem klasę statyczną w mojej usłudze iRepozytorium Później tworzę kontener Unity w mojej warstwie widoku (MVC) i przekazuję go do tych klas statycznych, zapełniają kontener tym, czego potrzebują, oraz następną warstwą, na przykład warstwa usług wywołuje również klasę statyczną w moim repozytorium.
W ten sposób konfiguruję kontener ze wszystkim, czego potrzebuję.
Pytanie brzmi: czy to dobrze robić?
0 dla odpowiedzi № 3
Jeśli używamy Unity. możemy zaimplementować rozszerzenie kontenera Unity w warstwie środkowej i zarejestrować się w warstwie prezentacji, jak poniżej.
//Data Layer dependency mapping as extension eg : IUnitOfWork
container.AddNewExtension<DependencyInjectionExtension>();
Więcej szczegółów można znaleźć w artykule.
Dzięki