Próbuję powiązać dwie konkretne klasy z jednym interfejsem. Jakiej komendy powinienem użyć w Ninject, aby to zrobić? Co próbuję zrobić, to powiązać dwie konkretne klasy z jedną bazą interfejsu w nazwie kontrolera. Czy to jest możliwe? Przypuszczam, że w ninjectu użyjesz opcji .Kiedy dajesz warunkowy, ale nie ma tam samouczka, który pokazuje, jak użyć tego. Kiedy jest koniec.Ninject do wiązania na różnych kontrolerach
5
A
Odpowiedz
8
Oto kilka przykładów. Sprawdź projekt źródłowy Ninject i jego podprojekt Testy dla różnych próbek użycia, to najlepsza dokumentacja dla niego, zwłaszcza, że dokumenty nie zostały jeszcze zaktualizowane dla wersji 2.
// usage of WhenClassHas attribute
Bind<IRepository>().To<XmlDefaultRepository>().WhenClassHas<PageAttribute>().WithConstructorArgument("contentType", ContentType.Page);
// usage of WhenInjectedInto
Bind<IRepository>().To<XmlDefaultRepository>().WhenInjectedInto(typeof(ServicesController));
Bind<IRepository>().To<XmlDefaultRepository>().WhenInjectedInto(typeof(PageController)).WithConstructorArgument("contentType", ContentType.Page);
Bind<IRepository>().To<XmlDefaultRepository>().WhenInjectedInto(typeof(WidgetZoneController)).WithConstructorArgument("contentType", ContentType.WidgetZone);
// you can also do this
Bind<IRepository>().To<PageRepository>().WhenInjectedInto(typeof(PageController)).WithConstructorArgument("contentType", ContentType.Page);
Bind<IRepository>().To<WidgetZoneRepository>().WhenInjectedInto(typeof(WidgetZoneController)).WithConstructorArgument("contentType", ContentType.WidgetZone);
// or this if you don't need any parameters to your constructor
Bind<IRepository>().To<PageRepository>().WhenInjectedInto(typeof(PageController));
Bind<IRepository>().To<WidgetZoneRepository>().WhenInjectedInto(typeof(WidgetZoneController));
// usage of ToMethod()
Bind<HttpContextBase>().ToMethod(context => new HttpContextWrapper(HttpContext.Current));
HTH
Powiązane problemy
- 1. Użycie Ninject do wiązania atrybutów filtrów WebApi
- 2. są wielokrotne ninject Wiązania gwarantuje utrzymanie ich kolejność wiązania
- 3. Ninject warunkowego wiązania w zależności od typu parametru
- 4. Jak zarządzać obszarami MVC i funkcją RenderAction w różnych kontrolerach?
- 5. Uzyskiwanie dostępu do jądra ninject w Application_Start
- 6. Wiosna Bezpieczeństwo @PreAuthorize na kontrolerach
- 7. W jaki sposób udostępniasz popularne metody w różnych kontrolerach Grails?
- 8. wstrzyknąć różnych klas, które implementują ten sam interfejs korzystając Ninject
- 9. Ninject Multicasting
- 10. Uruchamiaj testy jednostek na kontrolerach wymagających uwierzytelniania.
- 11. Jak podzielić wyzwalacze na kontrolerach XBOX One?
- 12. MVC4: Wyłącz widoki mobilne na niektórych kontrolerach
- 13. Test jednostkowy z Ninject Instantiate
- 14. Jak ustawić różne wiązania Auto Layout dla różnych rozmiarów ekranów
- 15. AutoMapper 4.2 i Ninject 3.2
- 16. Wstrzykiwanie zależności do WPF przy użyciu Ninject
- 17. Haskell do notacji do wiązania
- 18. Obsługa wyjątków w kontrolerach Grails
- 19. Interfejs wiązania za pomocą ToMethod do metody z parametrem
- 20. WPF: Ustaw właściwość wiązania dla wiązania ListBox
- 21. Ninject: Jak mogę wstrzyknąć do biblioteki klas?
- 22. Ninject, przekazujący argument konstruktora do jądra
- 23. Wstrzykiwanie zmiennej lokalnej do wiązania
- 24. Narzędzie do generowania wiązania B
- 25. Implementacja sesji na żądanie dla WCF, NHibernate i Ninject
- 26. RAILS 3 - Transakcje w kontrolerach
- 27. Udostępnianie wartości NSOperationQueue w kontrolerach widoku?
- 28. Uzyskiwanie "MissingMethodException: Nie można utworzyć wystąpienia interfejsu" podczas wiązania ogólnego interfejsu repozytorium z Ninject
- 29. nie pasujące Wiązania są dostępne, a typ nie jest self-Bindable w Ninject
- 30. Automatyczne okablowanie dla Ninject
staram polecenia WhenInjectedInto(), ale nadal nie działa dla mnie. Jeśli twój kontroler ma parametry, czy naprawdę potrzebujesz dodać WithConstructorArgument()? – Ganator
Nie kontroler ma tylko konstruktor, który przyjmuje IRepository, ale implementacja IRepository (w moim przypadku XmlDefaultRepository) ma konstruktora, który przyjmuje parametr contentType typu string, do czego służy przykład z funkcją WithConstructorArgument(). – mare
Uwaga - te metody When ...() i With ...() mogą być przenoszone łańcuchowo, można zatrzymać na WhenInjectedInto(). I, tak, WhenInjectedInto() działa dla mnie po wyjęciu z pudełka, bardzo proste, pod warunkiem, że implementacja twojego schematu repozytorium jest również prosta. Możesz napisać kod do interfejsu repozytorium i jego implementację i zobaczmy. Również wpisz kod z global.asax.cs, gdzie konfigurujesz DI. – mare