В итоге я решил передать страницу в качестве параметра на завод. Чтобы упростить вызовы метода фабрики, я изменил класс фабрики с одиночного на общий класс и передал страницу конструктору:
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;
}
}
Поскольку мне приходится создавать множество элементов управления на каждой странице вместе с фабрикой, это, вероятно, самый краткий и удобный способ реализации шаблона.