Αν και ο τίτλος μπορεί να φαίνεται λίγο περίεργος, αυτό που θέλω να κάνω είναι σχετικά απλό.
Παλιότερα λοιπόν είχα γράψει στο blog μου ένα αρθράκι (για τη δημιουργία του οποίου πάλι είχα σημαντική βοήθεια από τα μέλη της κοινότητας εδώ), σχετικά με τη Δημιουργία design-time combo-style String property για user control. Ουσιαστικά, δηλαδή, για το πώς φτιάχνουμε το δικό μας typeconverter για να δώσουμε σε ένα user-control string properties με προκαθορισμένες τιμές που θα επιλέγονται από combo box στο property grid τους σε design-time.
Προέκυψε η ανάγκη να επεκτεινω αυτό το concept, δεν είμαι όμως σίγουρος πως αυτό που θέλω να κάνω μπορεί με κάποιον τρόπο να υλοποιηθεί. Θέλω λοιπόν να τραβήξω reflection σε DESIGN TIME στο Assembly που θα εκτελεστεί, ώστε να "γεμίσω" αυτό το design-time property με τα ονόματα κλάσεων που κληρονομούν από κάποιον συγκεκριμένο τύπο και βρίσκονται στο Assembly μου.
Το θέμα γίνεται ακόμα δυσκολότερο, γιατί το control που θα περιέχει το property αυτό ΔΕΝ βρίσκεται στο Assembly που θα εκτελεστεί αλλά σε ένα άλλο assembly.
Ενας ακόμα παράγοντας δυσκολίας είναι οτι ΔΕΝ θέλω να έχω hardcoded το όνομα του Assembly από το οποίο θα τραβήξω τα ονόματα. Θέλω πάντα να είναι αυτό που θα εκτελεστεί, χωρίς όμως να γνωρίζω εκ των προτέρων ποιό θα είναι. Αυτό γιατί το control έχει μπει σε μια ξεχωριστή library η οποία γίνεται πάντα reference από το εκτελούμενο assembly.
Εκείνη την ώρα δεν έχω ExecutingAssembly (ειμαι σε design time - και μάλιστα τρώω ένα ΦΟΒΕΡΟ crash αν επιχειρήσω να το χρησιμοποιήσω), το CallingAssembly μου φαίνεται να ειναι το System.Windows.Forms.Form και το EntryAssembly μου πάλι δεν παίζει.
Η ερώτηση λοιπόν είναι: Γινεται, ή να εγκαταλείψω την προσπάθεια; Πως μπορεί σε design-time κάποιος να επιχειρήσει να κάνει reflection στο startup assembly (αυτό που αντιστοιχεί στο startup project του solution του) και να πάρει types, χωρίς να έχει hardcoded ονομα; (Εννοείται οτι το assembly έχει γίνει compile). Μήπως το reflection δεν είναι ο σωστός τρόπος (πολυ το φοβαμαι αυτό!)
Σωτήρης Φιλιππίδης
DotSee Web Services