Chcę mieć aplikację, która działa jako host dla wielu innych małych aplikacji. Każda z tych aplikacji powinna działać jako rodzaj wtyczki do tej głównej aplikacji. Nazywam je wtyczkami nie w tym sensie, że dodają coś do głównej aplikacji, ale dlatego, że mogą pracować tylko z tą aplikacją hosta, ponieważ zależą od niektórych z jej usług.Pytanie o to, jak zaimplementować aplikację hosta C# z architekturą podobną do wtyczki.
Mój pomysł polegał na tym, aby każda z tych wtyczek działała w innej domenie aplikacji. Problem polega na tym, że moja aplikacja hosta powinna mieć zestaw usług, których moje wtyczki będą chciały używać iz tego co rozumiem, przepływ danych do iz różnych domen aplikacji nie jest niczym szczególnym.
Z jednej strony chciałbym, aby zachowywały się jak samodzielne aplikacje (chociaż, jak powiedziałem, muszą często używać usług aplikacji hosta), ale z drugiej strony chciałbym, aby którekolwiek z nich zawiesza się, moja główna aplikacja nie ucierpiałaby z tego powodu.
Jakie jest najlepsze (.NET) podejście do tego rodzaju sytuacji? Czy wszystkie działają na tym samym AppDomain, ale każdy z nich w innym wątku? Korzystasz z różnych domen aplikacji? Po jednym dla każdej "wtyczki"? Jak sprawić, by komunikowały się z aplikacją hosta? W inny sposób to zrobić?
Chociaż prędkość nie jest tu problemem, nie chciałbym, aby wywoływanie funkcji było znacznie wolniejsze niż w przypadku zwykłej aplikacji .NET.
Dzięki
EDIT: Może ja naprawdę trzeba używać różnych AppDomains. Z tego, co czytałem, ładowanie złożeń w różnych domenach aplikacji jest jedynym sposobem, aby później móc je usunąć z procesu.
Jest to aplikacja do hobby, nic specjalnego. W pełni ufam uruchomieniu kodu. Problem polega na tym, że potrzebuję, aby każda z moich wtyczek działała cały czas (tzn. Nie mogę po prostu sprawić, aby moja aplikacja hosta wywoływała moje wtyczki, muszą one być niezależne i uruchamiać dla siebie.) –
W takim przypadku po prostu dałbym każdy ma własny wątek do uruchomienia i wywołaj dowolną metodę "Main", którą zdefiniowałeś. Możesz zdecydować się na zawinięcie wywołania do "Main" z wątku w try/catch, jeśli chcesz zapewnić przyjazne wsparcie w przypadku, gdy wtyczka zgłasza wyjątek. –
Tak, ale patrz powyżej. W ten sposób nie mogłem później wyładować złożonych zestawów bez restartowania aplikacji. Muszę je mieć w różnych domenach aplikacji, aby można je było rozładować, kiedy tylko chcę. –