5

Jestem ciekawy, czy można zastąpić wbudowanym kontenerem IoC Spring.Net przy użyciu programu Ninject. Używamy Ninjecta w moim zespole do IoC w naszych innych projektach, więc chciałbym dalej używać tego kontenera, jeśli to możliwe.Wymień IoC Spring.Net na inny pojemnik (np. Ninject)

Czy to możliwe? Czy ktoś napisał adapter Ninject-Spring.Net?

Edit

Lubię wiele części pakietu Spring.Net (dostęp do danych, transakcji, etc.), ale ja nie lubię pojemnika wtrysku zależność. Chciałbym wymienić że z Ninject

Dzięki

Odpowiedz

2

Jeffrey, czy możesz podać przykład tego, co próbujesz zrobić? Nie rozumiem twojego punktu, dlaczego/gdzie/jak chcesz mieszać 2 kontenery. Jeśli twój kod jest całkowicie niezawierający kontenerów, nie będziesz miał żadnych problemów z użyciem kontenera do wykonania okablowania.

+0

Erich, nie chcę mieszać dwóch, chcę całkowicie zastąpić kontener Spring.Net przez Ninject (używamy go w innych projektach i wolę jego proste, płynne API). Pytanie boczne: Czy Spring.Net jest generalnie napisany wokół wtrysku właściwości lub konstruktora? Niektóre z klas, na które patrzyłem, wyglądają tak, jakby były skonfigurowane z zastrzykiem. –

+0

Pozwól mi wyjaśnić, ponieważ widzę, skąd pochodzi nieporozumienie. Podoba mi się na przykład wrappery DAO i ADO.Net używane w Spring.Net, ale chcę mieć możliwość skonfigurowania tych komponentów bez użycia kontenera dostarczonego w ramach Spring.Net. –

+1

Jeffrey, całkiem dobrze jest używać innych bibliotek Spring.NET niezależnie od kontenera IoC. W odniesieniu do wstrzyknięcia Konstruktor- w porównaniu do wtrysku właściwości, Spring.NET umożliwia wybór między dwoma obiektami. Jeśli chodzi o automatyczne okablowanie obiektów, można nawet skonfigurować kontener Spring, aby najpierw szukać konstruktora, a jeśli nic nie zostanie znalezione lub może być zaspokojone - zamiast tego użyj wtrysku właściwości. Jeśli chodzi o proste, płynne API, możesz wypróbować mój nowy projekt Spring.Config http://eeichinger.blogspot.com/2009/12/merry-xmlless-codeconfig-for-springnet.html. –

6

Nie mogę mówić konkretnie o przekształcenie Spring.Net do Ninject, ale w ogóle, cały kod aplikacji powinien być napisany być DI Container-agnostyk.

Najlepszym sposobem myślenia o pojemnikach DI jest Hollywood Principle. W kategoriach DI staje się, nie wywoływać DI Container, to zadzwonią do ciebie.

Innymi słowy, najlepsza aplikacja DI jest użycie prostych wzorów, takich jak Konstruktor wtryskowe i Abstract Factory.

Większość pojemników DI o wartości soli z natury rozumie te wzory, więc nie powinno być konieczne specjalne, specyficzne dla DI Container, przeskakiwanie przez obręcze.

Oznacza to również, że najlepiej jest, aby kod specyficzny dla DI był tylko w jednym pliku w aplikacji. To miejsce jest nazywane Korzeniami kompozycji, i tu właśnie DI Container zakrywa cały wykres obiektów i znika z drogi.

Postępując zgodnie z tą zasadą, można łatwo wymienić jeden pojemnik DI na inny.

Poniższe posty mają więcej szczegółów:

+0

+1. Uzgodnione - na pewno chcesz uniknąć omijania kontenera w celu użycia go jako lokalizatora usług. – TrueWill

+0

Zgadzam się z twoimi oświadczeniami, chciałem tylko wiedzieć, czy Spring.Net został opracowany w taki sposób. Nie mam z tym żadnego doświadczenia i nie chcę tracić czasu na zaglądanie, jeśli nie mogę używać Ninjecta z nim –

2

mam na myśli wszystko, co powiedziałem w innym moją odpowiedź. Jednak zdaję sobie również sprawę, że jeśli używasz obecnie użyj Spring.NET jako Lokalizatora Usług (tj. Masz kod rozproszony po całej bazie kodu, który zapytuje kontener), ta odpowiedź może nie być bardzo pomocna. W takim przypadku pomocny może być projekt Common Service Locator. Jest to projekt o otwartym kodzie źródłowym, który próbuje odciągnąć określonych lokalizatorów usług, ukrywając je za wspólnym interfejsem.

Chociaż nie wydają się mieć implementacji Ninject, to jednak mają implementację Spring.NET, więc może to zajmie Ci połowę.

Dla przypomnienia, uważam lokalizatora usług anty-wzorzec, a okaże się, że Common Service Locator jest błędne odpowiedzi do niewłaściwego problemu. W moich oczach jest to całkowicie zbędne, ale może być pomocne dla ciebie jako krok pośredni.

+0

Cześć Mark, doceniam twoje bardzo szczegółowe i pełne informacji odpowiedzi, ale mam ten sam komentarz co poprzednio: Wszystko, co naprawdę chcę wiedzieć, to czy ktoś użył Ninjecta z Spring.Net i/lub jakie były ich doświadczenia, w jaki sposób je połączono, itp.? –

Powiązane problemy