2008-11-10 3 views
0

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

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

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

Спасибо.

ответ

1

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

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

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

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

Ну, по крайней мере, вам не нужно проходить страницу вокруг. Subclassing TemplateControl будет работать.

Смежные вопросы