Jestem nowy w tym biznesie IoC i DI- Czuję, że otrzymuję tę koncepcję, jeśli przekazujesz obiekty o zasięgu globalnym, ale nie dostaję jak to działa, gdy trzeba przekazać obiekt, który ma określony stan logiczny. Na przykład, jeśli chciałbym wstrzyknąć obiekt osoby do obiektu polecenia zapisu, to w jaki sposób mógłbym dynamicznie wybrać właściwy obiekt osoby? Z tego, co widziałem, mógłbym domyślnie skonstruować obiekt, ale moim rozłączeniem jest to, że nie używałbyś domyślnego obiektu osoby, musiałby być dynamiczny. Zakładam, że kontener IoC może po prostu utrzymywać stan obiektu dla ciebie, gdy zostanie on przekazany, ale wtedy wydaje ci się, że masz do czynienia tylko z jednym obiektem, ponieważ nie byłoby żadnego bezpieczeństwa wątku, prawda? Wiem, że czegoś mi brakuje (może coś w stylu factoryclass), ale potrzebuję trochę więcej informacji o tym, jak to zadziała.IoC Dependency Injection dla obiektów stanowych (nie globalnych)
Odpowiedz
Zawsze możesz wstrzyknąć odbiorcy numer Abstract Factory i użyć go do utworzenia obiektów o zasięgu lokalnym.
Jest to czasami konieczne. Patrz następujące przykłady:
- MVC, DI (dependency injection) and creating Model instance from Controller
- Is there a pattern for initializing objects created via a DI container
- Can't combine Factory/DI
Jednak generalnie mamy tendencję, aby nie używać DI dla jednostek, ale przede wszystkim dla Usług. Zamiast tego jednostki są zazwyczaj tworzone za pośrednictwem jakiegoś repozytorium.
Podczas konstruowania obiektu usługi (np. WriteFileService
) wprowadzasz do niego rzeczy, których wewnętrznie potrzebuje do wykonania jego pracy. Być może potrzebuje obiektu systemu plików lub czegoś takiego.
Obiekt Person
w twoim przykładzie powinien zostać przekazany do obiektu usługi jako parametr wywołania metody. na przykład writeFileService.write(person)
Więc nie wstrzyknąłbyś WriteFileService do obiektu Entity osoby ... tak w tym przypadku, widzę, jak Entity mogą być używane bez infrastruktury DI. Mimo że WriteFileService najprawdopodobniej używał infrastruktury DI podczas jej tworzenia (w oparciu o zapotrzebowanie na wstrzykniętą klasę, która zapisuje do określonego wyjścia, np.WriterA - zapisuje do bazy danych, WriterB - prawa do konsoli itp ...). – mytwocents
- 1. Wtyczka ASMX Dependency Injection i IoC
- 2. Dependency Injection Startup Performance
- 3. Dependency Injection jako funkcja językowa?
- 4. Dependency Injection & using interfaces?
- 5. Dependency Injection z TypeConverters
- 6. Groovy Dependency Injection
- 7. Używanie Injection Dependency jako alternatywy dla Singletonów
- 8. Kiedy używać Dependency Injection? Kiedy nie?
- 9. Practical Singleton & Dependency Injection question
- 10. Aurelia Dependency Injection Decorator nie działa
- 11. Laravel Unit Testing Dependency Injection
- 12. Dependency Injection Container - Wzór Fabryka
- 13. Wiosna Dependency Injection z TestNG
- 14. Understanding Play 2.4 Dependency Injection
- 15. Automapper wraz z Dependency Injection
- 16. IoC kontener dla Objective-C
- 17. PHP - Dependency Injection laravel: Parametry podaje do Dependency konstruktora
- 18. Zbyt wiele argumentów Konstruktora dla Wzorca Wzorca Dependency Injection/Dziedziczenia
- 19. ASP.NET 5 MVC 6 Injection Dependency Injection z wieloma konstruktorami
- 20. Jaki jest związek między OSGi i Injection Dependency Injection?
- 21. Konstruktor Dependency Injection w ASP.NET MVC Controller
- 22. Dlaczego struktury Dependency Injection obsługują hierarchie kontenerów?
- 23. Framework zależności Dependency Injection dla aplikacji Windows 8 metro
- 24. Dependency Injection i struktura projektu dla aplikacji konsolowych
- 25. ZF2: Dependency Injection, MVC, konfiguracje i Bootstrap
- 26. Dependency Injection (za pomocą SimpleInjector) i OAuthAuthorizationServerProvider
- 27. Dependency Injection - Kto jest właścicielem interfejsu?
- 28. Slim ramy: currying vs Dependency Injection
- 29. Jak zrobić Generic repozytorium z Dependency Injection
- 30. Lazy Dependency Dependency
A więc, ogólnie, jednostki nie byłyby w ogóle częścią infrastruktury DI? Czy to komplikuję? – mytwocents
Zgadza się: jednostki i obiekty wartości mają tendencję do życia odrębnymi życiem. W pewnym sensie nadal są one w jakiś sposób zarządzane przez infrastrukturę DI (najlepiej wszystko), ale w bardzo pośredni sposób. Zazwyczaj są one odczytywane i zapisywane do stałego magazynu za pośrednictwem repozytoriów lub tym podobnych, a * te * są Usługami, które są częścią infrastruktury DI. –
OK, myślałem, że szef DI mówił, że obiekt osoby Enitity powinien zostać udostępniony z kontenera IoC (poprzez konfigurację) ... – mytwocents