Ich habe ein Konzept für ein Framework von Kontrollen, die ich gerne bauen würde. Was diese Idee unterscheidet, ist, dass ich nicht beabsichtige, den "one size fits all" -Ansatz oder den "one control to rule all" -Ansatz zu wählen.Wie erstellt man in C# ein Mix-In-Architektur-Framework?
Als Beispiel, macht Telerik eine sehr schöne Grid-Steuerung, wie auch ComponentOne, Xceed, etc .. Sie sind jedoch alle gigantische Kontrollen mit Hunderten oder Tausenden von Methoden und Eigenschaften, komplexe Objektmodellhiearchien, etc ... Allzu oft sind diese Gitter viel zu viel für das, was Sie brauchen, aber Sie müssen immer noch die herkulische Aufgabe übernehmen, das gesamte Gitter zu lernen, um etwas Einfaches zu tun.
Mein Konzept ist eher eine "mix-in" -Approach. Erstellen Sie ein sehr einfaches Steuerelement, und erstellen Sie dann Funktionen, die Sie der Steuerung "a-la-carte" hinzufügen können. Zum Beispiel haben Sie ein einfaches Raster, und Sie möchten Raster "Abschnitte" mit Kopf- und Fußzeilen für jeden hinzufügen.
Ok, also wo ist das Problem? Die traditionelle Art, so etwas zu tun, ist die Mehrfachvererbung, die von C# nicht unterstützt wird. Auch wenn es das unterstützt, bin ich immer noch der Meinung, dass MI mehr Probleme hinzufügt, als es löst.
Also ich bin SO für Meinungen auf, wie man dieses Problem anzugehen. Wäre MEF eine mögliche Lösung?
EDIT:
Etwas, das mir einfällt, ist, dass es möglich sein könnte, Ausdruck Bäume zu verwenden, um die Steuerung von verschiedenen Ausdrücken zu bauen. Ich müsste noch etwas darüber nachdenken, aber es ist ein interessantes Konzept.
Eine andere mögliche Option könnte ein "Control Generator" sein, der basierend auf den ausgewählten Features eine Assembly generiert. Das scheint komplexer, aber mit T4 könnte managbar sein.
Siehe hier: http://msdn.microsoft.com/en-us/vcsharp/bb625996.aspx –
@ Robert Harvey - ich habe bereits weitgehend abgelehnte Methoden Erweiterung, weil sie nicht wirklich bieten können zusätzlicher Zustand, nur Methoden. Die Technik, auf die Sie verweisen, würde die Implementierung aller zusätzlichen Zustände durch den Endbenutzer erfordern, an denen ich nicht wirklich interessiert bin. –