Puoi disegnare qualcosa di simile all'extender provider:
e poi usarlo nel code-behind, ma comunque non nel designer:
non prendere questa come una buona implementazione, ma solo un esempio di quello che si può fare, devi lavorarci su, per capire che chiave utilizzare, perchè utilizzare semplicemente il riferimento all'oggetto come winforms/wpf fa, non funzionerebbe in asp.net, perchè ogni volta che la pagina viene chiamata gli oggetti vengono ricreati, per questo ho ricavato la chiave dal tipo di pagina, il tipo di controllo e l'id del componente.
Se questo esempio potrebbe fare al caso tuo, potresti poi creare un motore di estensione più generico, che ti dia la possibilità di registrare più estensioni sullo stesso controllo. Wpf implementa un GetValue e SetValue direttamente su ogni controllo, in questo modo il tracking delle attached property è legato al ciclo di vita del componente stesso, quando muore, con esso muoiono tutte le registrazioni. Nel tuo caso questi GetValue e SetValue, dovrebbero essere gestiti a parte in una classe che viene istanziata all'inizio dell'applicazione e che tenga traccia di tutte le estensioni aggiunte per ogni controllo. Il punto più difficile è il tracking di queste attached property, quando le crei? quando le distruggi? ecc... Per ora l'implementazione che ti ho dato le tiene per tutta la durata dell'applicazione e uguale per ogni utente connesso, divise per pagina, quindi da qui devi capire come personalizzare la cosa per salvare i dati nella viewstate, piuttosto che in sessione o comunque divisi anche per session_id.
Michael Denny
Software Developer & Architect
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
Twitter: @dennymic