Frage

Ich brauche das klassische Factory Method-Muster zu implementieren, in ASP.NET-Steuerelemente dynamisch zu erstellen.

Die einzige Möglichkeit, die ich gefunden habe Steuerelemente erstellen .ascx ist die Loadcontrol Methode der Seite / Usercontrol Klassen zu verwenden. Ich finde es jedoch chaotisch meine Fabrik mit einer Seite zu verlinken oder eine Seite Parameter in die Fabrik zu übergeben.

Weiß jemand, der ein anderes Verfahrens solche Kontrollen (wie eine statische Methode irgendwo ich übersehen hätte) erstellen?

Danke.

War es hilfreich?

Lösung

Am Ende habe ich beschlossen, die Seite als Parameter in die Fabrik zu übergeben. Um Anrufe an der Factory-Methode zu erleichtern, änderte ich die Factory-Klasse von einem Singleton zu einer gemeinsamen Klasse, und ich bestehen die Seite an den Konstruktor:

public ControlsFactory
{
    private Page _containingPage;

    public ControlsFactory(Page containingPage)
    {
        _containingPage = containingPage;
    }

    public CustomControlClass GetControl(string type)
    {
        ... snip ...
        CustomControlClass result = (CustomControlClass)_containingPage.LoadControl(controlLocation);

        return result;
    }
}

Da ich mit dem Werk auf jeder Seite viele Steuerelemente zu instanziiert habe, ist dies wahrscheinlich der knappste und nutzbarer Weg, um das Muster zu implementieren.

Andere Tipps

Nun, nachdem Reflektor eröffnen, die Loadcontrol-Funktion, die in Seite verwendet wird, ist in jedem Template zur Verfügung.

Im Inneren der tatsächlichen Loadcontrol verwendet interne Methoden in Buildmanager, so dass ich glaube nicht, dass es eine Möglichkeit, statische Methoden zu verwenden, ohne Reflexion verwendet wird.

Na ja, wenigstens brauchen Sie nicht um eine Seite zu übergeben. Subclassing Template funktionieren würde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top