1) Nie polecam posiadania widoków bezpośrednio przy użyciu odnośników zewnętrznych lub dynamicznie ładowanych odniesień zewnętrznych. Rozwijaj to, ponieważ twój widok współdziała z kontrolerem. Spraw, aby kontroler podawał obiekt danych do widoku, który jest znany w czasie kompilacji przez aplikację (innymi słowy, obiekt znany Twojej aplikacji internetowej w czasie kompilacji). Ma to na celu całkowite wyizolowanie (abstrakcji) specyficznej dla danego biznesu wtyczki z widoku. Następnie zmuś kontroler do interakcji z "wtyczką".
2) Nie wiem, jak działa "fabryka niestandardowa", ale obecnie nie budujemy już żadnych "fabryk niestandardowych". Zamiast tego wykorzystujemy kontenery wtrysku zależnego, takie jak Microsoft Unity (lub Ninject, Castle Windsor itp.). Tworzenie "niestandardowych fabryk" jest bardzo staromodne i zasadniczo wymyśla się na nowo koło, które zostało rozwiązane za pomocą wtrysku zależności.
3) W miarę dynamicznie ładuje zespoły zewnętrznych, ja nie wiem, czy masz to prawo, ale tu jest link:
Dynamically load a type from an external assembly
4) Zazwyczaj konstrukcja wtyczki naraża interfejsów, które są znane do głównej aplikacji internetowej w czasie kompilacji. To, co ukrywa projekt wtyczki, to implementacja, która może zmieniać się z jednej wtyczki na drugą. Ważne jest to, że każda wtyczka implementuje te same publiczne interfejsy, które są oczekiwane przez twoją główną aplikację internetową. Zwykle te interfejsy będą dostępne w oddzielnym projekcie "wspólnym", do którego odwołuje się zarówno główna aplikacja internetowa, jak i wtyczka implementująca te interfejsy. Dlatego z Twojej głównej aplikacji internetowej dowiesz się, jakie są publiczne interfejsy twoich wtyczek, możesz dynamicznie załadować zewnętrzny zestaw i użyć C# do odbicia, aby znaleźć klasy, które implementują te interfejsy i załadują je do twojego kontenera wtrysku zależności. Podobnie każdy, kto będzie chciał opracować wtyczkę do twojej aplikacji internetowej, będzie musiał wdrożyć interfejsy zdefiniowane w twoim "wspólnym" projekcie.
Uwaga: "Common" to po prostu losowa nazwa nadana projektowi. Możesz nazwać go "PluginInterface" lub cokolwiek chcesz.
Po tym, posiadanie kontrolera do pobrania, czego potrzebuje, z pojemnika z wtyczką zależności jest banalne.
Uwaga: Twoje interfejsy wtyczek prawdopodobnie będą zawierać elementy wejściowe i wyjściowe. Podmioty te są udostępniane głównej aplikacji internetowej i wtyczce. W takim przypadku, ponieważ te elementy są częścią twoich interfejsów, muszą być w projekcie "Wspólnym". Możesz ulec pokusie, aby twój kontroler zwrócił te jednostki bezpośrednio do twojego widoku, ale wtedy nie będziesz miał idealnej abstrakcji między twoim widokiem a twoją wtyczką. Brak doskonałych abstrakcji jest kolejną dyskusją.
Mam nadzieję, że pomoże!
Nie jest jasne, dlaczego wymagane jest, aby zespół był ładowany po uruchomieniu aplikacji? Nie byłoby to normalne zastosowanie w przypadku bibliotek zewnętrznych. – Claies
to coś w rodzaju wtyczki lub pomyśl o modułowych aplikacjach internetowych, takich jak cms sad. w rzeczywistości zestaw z jego widokami przychodzi w czasie wykonywania, który daje użytkownik! :) –
Nie sądzę, że jest to możliwe, ponieważ podczas korzystania z Roslyn w środowisku dnx dynamiczny kompilator szuka rozwiązania zależności przy użyciu project.json jako część procesu kompilacji. Twój dynamicznie ładowany zespół nie będzie wymieniony w projekcie.json, a zatem kompilator zawiedzie. Sądzę, że teoretycznie byłoby możliwe dynamiczne dostosowanie projektu project.json przed odzwierciedleniem nowej zależności po starcie i przed załadowaniem widoku, ale szczerze mówiąc nie mam pojęcia, czy to zadziała, a w najlepszym przypadku będzie to hack. Nawet gdyby zadziałało, mogłoby to przerwać w przyszłości. –