Niedawno uderzyłem w ceglany mur, kiedy dałem szansę na Ninject w projekcie, nad którym pracuję.Fabryka wtrysku zależności statycznych, dobra czy zła?
Przeszedłem przez wszelkiego rodzaju pytania, systematycznie prosząc o mój projekt i architekturę na rzecz zastrzyku zależności.
Is this right to inject the container/kernel to the main application presenter?
How to configure Ninject to use along with NHibernate in WinForms?
Conditional dependency injection binding only when property not null
What did I get wrong, DI or Design, and how should I go about it?
Po godzin i dni i godzin morza rwania, natknąłem się na ten artykuł od Justina Etheredge'a, który mówi o jego statycznej klasie DIFactory.
I teraz zastanawiam się, co to jest nie wszystko działa jak magia użyciu statycznej fabryki DI?
Chciałbym usłyszeć plusy i minusy używania statycznej fabryki DI w rzeczywistej aplikacji.
Czy IoC i DI są takie same, czy też są bardzo podobne, chociaż istnieją pewne różnice?
Co się stanie, jeśli niektórych typów nie można utworzyć w instancji podczas uruchamiania aplikacji, ponieważ do prawidłowego utworzenia wystąpienia będą potrzebne poświadczenia użytkownika? Na przykład, 'NHibernante.ISessionFactory' jest takim problemem, ponieważ nie można go utworzyć bez prawidłowego ciągu połączenia, a po utworzeniu nie pozwala zmienić łańcucha połączenia. Jako obejście można podać "IDbConnection" i traci pamięć podręczną drugiego poziomu, która przechowuje ślady obiektu w całym cyklu życia "ISession". Wówczas użytkownik musiałby podać swoje poświadczenia, a teraz zależność 'ISessionFactory' nie stanowi już problemu. –
Czy to byłaby 'AbstractFactory', która pozwoliłaby na rejestrację nowych typów? Jak byś to zrobił? –
Jeśli nie możesz rozwiązać podprogramu w czasie wykonywania, zawsze możesz dodać kolejną warstwę pośrednią. Fabryka abstrakcyjna byłaby jedną z opcji. Oto więcej informacji o [wdrażaniu abstrakcyjnej fabryki] (http://blog.ploeh.dk/2012/03/15/ImplementinganAbstractFactory). –