Реализация фабрики WebControl в ASP.NET - PullRequest
0 голосов
/ 10 ноября 2008

Мне нужно реализовать классический шаблон Factory Method в ASP.NET для динамического создания серверных элементов управления.

Единственный способ создания элементов управления .ascx, который я нашел, - это использовать метод LoadControl классов Page / UserControl. Однако мне не совсем удобно связывать свою фабрику со страницей или передавать параметр страницы фабрике.

Кто-нибудь знает другой метод создания таких элементов управления (например, статический метод, который я бы пропустил)?

Спасибо.

Ответы [ 2 ]

1 голос
/ 10 ноября 2008

В итоге я решил передать страницу в качестве параметра на завод. Чтобы упростить вызовы метода фабрики, я изменил класс фабрики с одиночного на общий класс и передал страницу конструктору:

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

Поскольку мне приходится создавать множество элементов управления на каждой странице вместе с фабрикой, это, вероятно, самый краткий и удобный способ реализации шаблона.

0 голосов
/ 10 ноября 2008

Через некоторое время после открытия отражателя функция LoadControl, используемая на странице, доступна в любом TemplateControl.

Внутри фактического LoadControl используются внутренние методы в BuildManager, поэтому я не думаю, что есть способ использовать статические методы без использования отражения.

Ну, по крайней мере, вам не нужно пропускать страницу. Создание подкласса TemplateControl будет работать.

...