OK, also ich bin auf der Suche nach einem Code, der in etwa wie folgt aussieht:
void DoSomething(object o)
{
if (o is Sometype1) {
//cast o to Sometype and do something to it
}
else if (o is Sometype2) {
//cast o to Sometype2 and do something to it
}
...
else if (o is SometypeN) {
//cast o to SometypeN and do something to it
}
}
Ein Ansatz wäre nun, alle Objekte zu o
die als Parameter verwendet werden, implementieren eine Schnittstelle wie
interface ICanHaveSomethingDoneToMe
{
//expose various properties that the DoSomething method wants to access
}
Das Problem dabei ist jedoch, dass ich nicht möchte, dass alle meine Objekte diese Schnittstelle implementieren - die Logik für die "do something"-Methode gehört nicht wirklich zu ihnen. Welches Muster sollte ich verwenden, um damit umzugehen?
Ich vermute so etwas wie eine Reihe von Implementierungen von
interface IPropertiesForDoingSomethingTo<T>
{
//expose various properties that the DoSomething method wants to access
}
könnte besser sein. Ich würde eine Implementierung für jeden der Objekttypen haben, für die ich das tun möchte, aber dann habe ich dieses neue Problem. Ich müsste dann eine Methode haben wie
IPropertiesForDoingSomethingTo<T> GetPropsGeneric(T t);
aber muss dafür ein massiver Schalter verwendet werden? Soll ich eine Klasse mit vielen Methoden definieren wie
IPropertiesForDoingSomethingTo<Someobject1> GetProps(Someobject1 t);
...
IPropertiesForDoingSomethingTo<Someobject1> GetProps(SomeobjectN t);
Dies hat gegenüber der generischen Version den Nachteil, dass man zur Laufzeit keine neuen Typen hinzufügen kann. Gibt es etwas schlaues, was man mit einem DI-Container in GetPropsGeneric machen kann, um den Container aufzulösen? Vielen Dank!