Czytałem artykuły na MSDN o Unity (Dependency Injection, Inversion of Control), ale myślę, że potrzebuję wyjaśnienia w prostych słowach (lub prostych przykładach). Znam wzorzec MVPC (używamy go tutaj), ale po prostu nie mogę jeszcze zrozumieć tej rzeczy z Unity i myślę, że to kolejny krok w naszym projektowaniu aplikacji.
c#
dependency-injection
inversion-of-control
unity-container
Ryan Abbott
źródło
źródło
Odpowiedzi:
Unity to tylko „kontener” IoC. Google StructureMap i zamiast tego wypróbuj. Myślę, że trochę łatwiejsze do zrozumienia, kiedy rzeczy IoC są dla ciebie nowe.
Zasadniczo, jeśli rozumiesz IoC, rozumiesz, że to, co robisz, to odwracanie kontroli, kiedy obiekt zostanie utworzony.
Bez IoC:
Z kontenerem IoC:
Bez IoC Twoja klasa, która korzysta z IMyService, będzie musiała wprowadzić nową konkretną wersję usługi do użycia. Jest to złe z wielu powodów (powiązałeś swoją klasę z konkretną konkretną wersją IMyService, nie możesz jej łatwo przetestować jednostkowo, nie możesz jej łatwo zmienić itp.)
Za pomocą kontenera IoC „konfigurujesz” kontener, aby rozwiązać te zależności za Ciebie. Tak więc w przypadku schematu iniekcji opartego na konstruktorze wystarczy przekazać interfejs do zależności IMyService do konstruktora. Gdy utworzysz MyClass z kontenerem, Twój kontener rozwiąże za Ciebie zależność IMyService.
Korzystając ze StructureMap, konfiguracja kontenera wygląda następująco:
Więc to, co zrobiłeś, to powiedzenie kontenerowi: „Gdy ktoś zażąda usługi IMyService, przekaż mu kopię SomeConcreteService”. Określono również, że gdy ktoś prosi o MyClass, otrzymuje konkretną MyClass.
To wszystko, co naprawdę robi kontener IoC. Mogą zrobić więcej, ale o to właśnie chodzi - rozwiązują zależności za Ciebie, więc Ty nie musisz (i nie musisz używać słowa kluczowego „new” w całym kodzie).
Ostatni krok: kiedy tworzysz MyClass, zrobiłbyś to:
Mam nadzieję, że to pomoże. Zapraszam do e-maila.
źródło
Właśnie obejrzałem 30-minutowy zrzut ekranu IoC o Unity Dependency Injection Davida Haydena i uznałem, że to dobre wyjaśnienie z przykładami. Oto fragment notatek z programu:
Screencast przedstawia kilka typowych zastosowań Unity IoC, takich jak:
źródło
Unity to biblioteka, jak wiele innych, która umożliwia uzyskanie instancji żądanego typu bez konieczności jej samodzielnego tworzenia. Tak biorąc.
Możesz użyć biblioteki, takiej jak Unity, do zarejestrowania Kalkulatora, który ma zostać zwrócony, gdy żądany jest typ ICalculator, czyli IoC (Odwrócenie kontroli) (ten przykład jest teoretyczny, nie jest technicznie poprawny).
Więc teraz, gdy potrzebujesz instancji ICalculator, po prostu ...
Biblioteki IoC można zwykle skonfigurować tak, aby zawierały pojedyncze egzemplarze lub tworzyły nową instancję za każdym razem, gdy rozwiążesz typ.
Teraz powiedzmy, że masz klasę, która opiera się na ICalculator, który jest obecny, co możesz mieć ...
I możesz skonfigurować bibliotekę, aby wstrzyknąć obiekt do konstruktora po jego utworzeniu.
Tak więc DI lub Dependency Injection oznacza wstrzyknięcie dowolnego obiektu, którego może wymagać inny.
źródło
Ten gość WilcoxTutorials daje doskonałą demonstrację kontenera Unity, który jest przeznaczony dla początkujących.
Część 1: http://www.youtube.com/watch?v=CWwe9Z0Gyew
Część 2: http://www.youtube.com/watch?v=PsIbevgzQQE
Za mniej niż pół godziny zrozumiesz podstawy!
źródło
Jedność to IoC. Celem IoC jest wyodrębnienie okablowania zależności między typami poza samymi typami. Ma to kilka zalet. Przede wszystkim odbywa się to centralnie, co oznacza, że nie musisz zmieniać dużej ilości kodu, gdy zmieniają się zależności (co może mieć miejsce w przypadku testów jednostkowych).
Ponadto, jeśli okablowanie jest wykonywane przy użyciu danych konfiguracyjnych zamiast kodu, można faktycznie ponownie okablować zależności po wdrożeniu, a tym samym zmienić zachowanie aplikacji bez zmiany kodu.
źródło
Witryna MSDN zawiera przewodnik programisty dotyczący wstrzykiwania zależności przy użyciu aparatu Unity, który może być przydatny.
Przewodnik programisty rozpoczyna się od podstaw tego, czym jest wstrzykiwanie zależności, i zawiera przykłady użycia aparatu Unity do wstrzykiwania zależności. Od lutego 2014 r. Przewodnik dewelopera obejmuje Unity 3.0, który został wydany w kwietniu 2013 r.
źródło
Omawiam większość przykładów iniekcji zależności w ASP.NET Web API 2
W DIAutoV2Controller.cs zastosowano mechanizm Auto Injection
W DIV2Controller.cs wszystko zostanie wstrzyknięte z klasy Dependency Configuration Resolver
Konfigurowanie mechanizmu rozpoznawania zależności
źródło