Moja aplikacja składa się z kilku podstawowych zespołów i kilku złożeń rozszerzeń/wtyczek. Aby MEF mógł poznać wszystkie części, które ma do zaoferowania wtyczka, muszę załadować te zespoły, nawet jeśli nigdy nie zamierzam używać żadnej z ich części. To sprawia, że uruchomienie aplikacji zajmuje więcej czasu (jeśli mam załadować wszystkie zestawy podczas uruchamiania), a także zwiększa ślad pamięci.Leniwe ładowanie zestawów/katalogów
Idealnie nie będę musiał ładować zespołów, dopóki ich faktycznie nie potrzebuję. Załadowałbym tylko dane eksportu wtyczek, a kiedy faktycznie potrzebuję zaimportować część, MEF załadowałby zespół i zapewniłby część.
Znalazłem coś, co robi prawie wszystko, co właśnie napisałem, ale po zapytaniu o to w MEF CachedAssemblyCatalog - Lazy Loading of Assemblies, zdałem sobie sprawę, że ten kod nie jest uważany za stabilny i nie jest utrzymywany przez zespół MEF, więc mam postanowiłam go nie używać.
Moje pytanie brzmi jak to mogę osiągnąć to zachowanie:
- Będąc w stanie uzyskać dostęp do metadanych eksportowej złożeń wtyczki bez ładowania cały ich montaż.
- Przejrzysta integracja z kodem importującym części; tj. importować jak zwykle - ktoś inny (wyspecjalizowany katalog?) zajmie się ładowaniem zespołów, jeśli to konieczne, i dostarczy żądaną część.
- nie tracąc żadnej istniejącej MEF funkcjonalności takich jak rekompozycję, leniwy typów itp
jestem całkowicie w porządku z rozwiązania, które wymaga parsowania wtyczek z wyprzedzeniem, aby stworzyć zespół metadanych pliku XML lub etażerka.
Hej Petrik, bardzo dziękuję za pomoc! Natknąłem się na pytanie, które dołączyłeś jakiś czas temu i bardzo mi pomogło w rozwiązaniu tego problemu. To, co robiłem, było podobne do tego, co tam opisałeś - serializowałem dane do pliku i utworzyłem nowy katalog, który pochłania ten plik. W ten sposób dostępne są wszystkie eksporty, w tym metadane, i za pomocą interfejsu API "ReflectionModelServices" wszystko zostało załadowane leniwie. To wydaje się najlepszym sposobem na spełnienie moich wymagań. Mam nadzieję, że będę miał trochę czasu, aby odpowiedzieć na to pytanie osobiście, dzięki temu, co zrobiłem. Dzięki jeszcze raz! –