Question

Je dois implémenter le modèle Factory Method classique dans ASP.NET pour créer des contrôles serveur de manière dynamique.

La seule façon que j'ai trouvée de créer des contrôles .ascx consiste à utiliser la méthode LoadControl des classes Page / UserControl. Je trouve cependant difficile de lier mon usine à une page ou de lui transmettre un paramètre de page.

Quelqu'un connaît-il une autre méthode pour créer de tels contrôles (comme une méthode statique que j'aurais oubliée)?

Merci.

Était-ce utile?

La solution

Finalement, j'ai décidé de transmettre la page en tant que paramètre à l'usine. Pour faciliter les appels à la méthode factory, j'ai changé la classe factory d'un singleton à une classe commune et j'ai transmis la page au constructeur:

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;
    }
}

Étant donné que je dois instancier de nombreux contrôles sur chaque page avec l'usine, c'est probablement le moyen le plus concis et le plus utilisable pour implémenter le modèle.

Autres conseils

Bien après avoir ouvert le réflecteur, la fonction LoadControl utilisée dans Page est disponible dans n’importe quel TemplateControl.

À l'intérieur du LoadControl lui-même utilise des méthodes internes dans BuildManager, je ne pense donc pas qu'il soit possible d'utiliser des méthodes statiques sans utiliser la réflexion.

Au moins, vous n'avez pas besoin de faire circuler une page. Le sous-classement de TemplateControl fonctionnerait.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top