0

我需要在 ASP.NET 中实现经典的工厂方法模式来动态创建服务器控件。

我发现创建 .ascx 控件的唯一方法是使用 Page/UserControl 类的 LoadControl 方法。但是,我发现将我的工厂与页面链接或将页面参数传递给工厂很麻烦。

有谁知道创建此类控件的另一种方法(例如我忽略的某个静态方法)?

谢谢。

4

2 回答 2

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

由于我必须使用工厂在每个页面上实例化许多控件,这可能是实现该模式的最简洁和可用的方式。

于 2008-11-10T19:23:43.523 回答
0

打开反射器之后,Page 中使用的 LoadControl 功能在任何 TemplateControl 中都可用。

在实际的 LoadControl 内部使用 BuildManager 中的内部方法,所以我认为没有办法在不使用反射的情况下使用静态方法。

好吧,至少您不需要传递页面。子类化 TemplateControl 会起作用。

于 2008-11-10T18:17:12.533 回答