Al enige tijd stoei ik met het volgende probleem;
Ik ben bezig met een programma om Winamp te bedienen vanaf Cisco IP Telefoons. Dit werkt via een server die XML aanbiedt die de telefoon snapt.
Om structuur aan te brengen heb ik pagina's bedacht, deze extenden WinampPage. Nu wil ik dat van iedere implementatie van WinampPage een instantie zich (bij het opstarten van mn programma) aanmeldt.
Ik heb nu een klasse WinampPageCollection die in de constructor van iedere klasse die een WinampPage is een instantie toevoegt. Dit is echter hardcoded, dus als ik een nieuwe pagina toevoeg en vergeet dit in WinampPageCollection op te nemen werkt het niet.
Concrete vraag
Hoe dwing ik implementaties van WinampPage zich toe te voegen aan de WinampPageCollection?
WinampPage.cs
WinampPageCollection:Constructor
Ik ben bezig met een programma om Winamp te bedienen vanaf Cisco IP Telefoons. Dit werkt via een server die XML aanbiedt die de telefoon snapt.
Om structuur aan te brengen heb ik pagina's bedacht, deze extenden WinampPage. Nu wil ik dat van iedere implementatie van WinampPage een instantie zich (bij het opstarten van mn programma) aanmeldt.
Ik heb nu een klasse WinampPageCollection die in de constructor van iedere klasse die een WinampPage is een instantie toevoegt. Dit is echter hardcoded, dus als ik een nieuwe pagina toevoeg en vergeet dit in WinampPageCollection op te nemen werkt het niet.
Concrete vraag
Hoe dwing ik implementaties van WinampPage zich toe te voegen aan de WinampPageCollection?
WinampPage.cs
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| using System; namespace WinampCisControl2 { public abstract class WinampPage { private string _handle = string.Empty; public string Handle { get { return _handle; } } public WinampPage(string handle) { _handle = handle; } public abstract CisControlReply HandleRequest(CisControlRequest request); } } |
WinampPageCollection:Constructor
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| public WinampPageCollection() { try { WinampPage wp; wp = new WinampMainMenu(); _pages.Add(wp.Handle, wp); wp = new WinampAbout(); _pages.Add(wp.Handle, wp); wp = new WinampPlaylist(); _pages.Add(wp.Handle, wp); wp = new WinampSearch(); _pages.Add(wp.Handle, wp); } catch(Exception ex) { Logger.Log("Exception in WinampPageCollection: " + ex.ToString(), this, LogLevel.ERROR); } } |