Popraw mnie, jeśli się mylę, ale MEF tylko jest dobry do zarządzania zestawem nieznanych rzeczy (wtyczek), które mogą być automatycznie wykryte i automatycznie podłączone. W przypadku przyszłego projektu będziemy potrzebować prawdziwego kontenera IoC, aby jawnie skonfigurować znane części aplikacji (w których MEF nie jest dobry), ale dodatkowo musimy również wspierać automatycznie wykryte wtyczki (najlepiej POCO bez atrybutów, jeśli jest to możliwe). Czy kontener IoC może to łatwo/domyślnie obsłużyć? Jeśli tak, to możesz podać krótką wskazówkę, jak to zrobić w Unity i StructureMap? To są dwie, które obecnie preferujemy. Naprawdę chcielibyśmy uniknąć zależności od kontenera IoC i MEF.Użyj kontenera IoC dla architektury wtyczki
Odpowiedz
Myślę, że ważne jest, aby pamiętać, że podczas gdy MEF nie jest kontenerem IoC w konwencjonalnym sensie, wykonuje inwersję kontroli. W rzeczywistości nie zgodziłbym się z tym i powiedziałbym, że MEF to kontener IoC, jak każdy inny. Prawdziwa różnica między słowami Jedność i MEF polega na tym, że MEF domyślnie obsługuje kompozycję w porównaniu do jawnej rozdzielczości typu i wykrywa wykrywanie przez konfigurację. Ale, jak widzieliśmy w projekcie MEFContrib, możliwe jest, że MEF zachowuje się bardziej jak tradycyjny kontener IoC. MEF zapewnia doskonałą podstawę do modularnego zachowania komponentów, zabiera wiele trudnych przeszczepów i sposób, w jaki jest zaprojektowany, pozwala na dodanie do niego większej funkcjonalności. Załóżmy na przykład, że twoja istniejąca baza kodów zbudowana jest wokół innego kontenera IoC lub lokalizatora usług, możesz to zrobić, aby móc to zrobić, możesz podłączyć dostawcę do lokalizatora usług, takiego jak projekt Common Service Locator, a następnie podłączyć zgodny Implementacja CSL i komponowanie elementów MEF przy użyciu typów pochodzących z innego kontenera IoC. MEF wykonuje również zastrzyk zależności dla ciebie.
Jeśli chcesz uniknąć zależności od konkretnego kontenera IoC lub samego MEF, zawsze możesz użyć czegoś takiego jak typowy serwisowy obiekt, który jest abstrakcją w stosunku do typowych operacji kontenerowych. W ten sposób, jeśli potrzebujesz/chcesz zmienić sposób, w jaki wszystko jest połączone razem, jest stosunkowo bezbolesny. Istnieją kompatybilne implementacje CSL dla większości kontenerów IoC i MEF.
Nadzieję, że pomaga.
Czy MEF Contrib pozwala częściom na POCO bez atrybutów? – bitbonk
Przypisany model jest domyślnym modelem programowania MEF. MEFContrib ma 'ConventionCatalog', który w połączeniu z' PartRegistry' pozwala na rejestrowanie typów takich jak np. Unity/Autofac/Windsor itp. –
- 1. Kiedy używać kontenera IOC?
- 2. C# DLL's wtyczki architektury
- 3. Budowanie architektury wtyczki za pomocą Adobe AIR
- 4. IOC dla aplikacji konsolowej?
- 5. Dlaczego dokładnie nie ma MEF kontenera DI/IoC?
- 6. Czas pracy UnitOfWork w WPF przy użyciu kontenera IoC
- 7. Jaki jest preferowany sposób łączenia zależności za pomocą kontenera IoC?
- 8. Abstrahowanie do kontenera IoC za Singleton - Czy to źle?
- 9. Użyj wtyczki do Android DataBinding równoległej do wtyczki GoogleServices
- 10. IoC kontener dla Objective-C
- 11. Wydarzenia Golang: EventEmitter/dispatcher dla architektury wtyczek
- 12. Użyj wtyczki select2 w aplikacji AngularJS
- 13. MEF vs. dowolne IoC
- 14. Project-Embedded IoC Container
- 15. Jak powinienem zamówić parametry ctor dla DI/IOC?
- 16. Kod Cruft. IoC na ratunek
- 17. wyszukiwanie tekstu dla architektury phoenix
- 18. niezdefiniowane symbole dla architektury i386:
- 19. Mapa modułu prywatnego dla architektury
- 20. niezdefiniowane symbole dla architektury i386
- 21. Serwer proxy dla architektury Scrapy
- 22. Używanie IoC do testowania jednostek
- 23. Kontener IoC dla przenośnych bibliotek klas
- 24. Użyj jquery, aby zwiększyć szerokość kontenera o 10 rem
- 25. Pobierz komendę dokowania dla kontenera
- 26. Wtyczki Sandboxed dla Node.js
- 27. Unit Testing obiekt, którego żywotność zakres jest obsługiwane przez IoC kontenera
- 28. Czy prymitywne parametry konstruktora są złym pomysłem podczas korzystania z kontenera IoC?
- 29. Smalltalk i IoC
- 30. Niezdefiniowane symbole dla architektury armv7, ld: nie znaleziono symboli dla architektury armv7 - co robić?
Co jest nie tak z używaniem MEF do wtyczek? Jest zaprojektowany dokładnie dla tego przypadku użycia i jego części ramy .Net. – jeroenh
Spójrz na Spring.Net. –
Powiedziałeś, że chcesz uniknąć pojemnika IoC i MEF, więc nie będę tego publikował jako odpowiedzi. Ale [Autofac] (http://nblumhardt.com/2010/04/introducing-autofac-2-1-rtw/) integruje się całkiem dobrze z MEF. –