Automatyczne wykrywanie klas implementujących dany interfejs

0

Mam powiedzmy opcję eksportu i interfejs dajmy na to IExporter, który ma metodę przyjmującą dane i zapisującą je w jakimś formacie.
Przykładowo mam klasę PDFExporter która implementuje IExporter i zapisuje dane do pliku PDF, klasę XLSExporter która robi to samo ale do formatu XLS itp.

Jak zgodnie ze wszystkimi konwencjami mam dodawać do programu kolejne klasy? W tej chwili mam dodatkową klasę która listuje wszystkie eksportery, ale te są na sztywno wpisane do listy w tej klasie co mi się nie podoba.

0

Jak chcesz wszystkie typy wykryc implementujace dany interfejs, to:

var type = typeof(IMyInterface);
var types = AppDomain.CurrentDomain.GetAssemblies()
    .SelectMany(s => s.GetTypes())
    .Where(p => type.IsAssignableFrom(p));

zrodlo: http://stackoverflow.com/questions/26733/getting-all-types-that-implement-an-interface-with-c-sharp-3-0

Jednak nie mam zadnej pewnosci czy o to chodzi, bo srednio zrozumialem o co pytasz.

0

nie wiem czy powinienem tu używać refleksji

pytam o wzorzec projektowy który pozwala na łatwe rozszerzanie funkcjonalności poprzez dodawaniu kolejnych klas implementujących dany interfejs

0

To po prostu tworzysz nowa klase implementujaca dany interfejs. Tak normalnie add->new item->code->class.

0
fasdfasg napisał(a):

Jak zgodnie ze wszystkimi konwencjami mam dodawać do programu kolejne klasy? W tej chwili mam dodatkową klasę która listuje wszystkie eksportery, ale te są na sztywno wpisane do listy w tej klasie co mi się nie podoba.

A co Ci się nie podoba? To jest normalna sprawa, że gdzieś jest klasa/metoda fabrykująca, która wie wszystko, o wszystkich implementacjach danego interfejsu. Chyba jedyną alternatywą jest wspomniana już refleksja.

1 użytkowników online, w tym zalogowanych: 0, gości: 1