Лучший способ состоит в том, чтобы иметь базовый класс для средств управления как:
public class PartialView : UserControl
{
protected override void OnInit(System.EventArgs e)
{
ObjectFactory.BuildUp(this);
base.OnInit(e);
}
}
, Который введет любое управление, которое наследовалось тому базовому классу (использует structuremap). Комбинируя это с основанной на свойстве конфигурацией, Вы будете в состоянии иметь средства управления как:
public partial class AdminHeader : PartialView
{
IMyRepository Repository{get;set;}
}
Обновление 1: , Если у Вас не может быть средств управления, наследовались, возможно, CMS имеет право рычага после создания средств управления, там можно назвать BuildUp. Также, если CMS позволяет Вам сцеплять что-то для выборки экземпляра, Вы могли бы использовать основанную на конструкторе инжекцию, но я предпочитаю BuildUp на этом определенном сценарии, поскольку asp.net не имеет рычага для этого.
Вы могли также создать некоторые одноэлементные экземпляры в событии Application_Start global.asax и иметь их в наличии как общедоступные статические свойства только для чтения.
Autofac поддерживает довольно ненавязчивую инъекцию зависимостей в ASP.NET WebForms. Насколько я понимаю, он просто подключается к жизненному циклу страницы ASP.NET с помощью модуля http и выполняет инъекцию свойств. Единственная загвоздка в том, что для элементов управления я не думаю, что это произойдет до после события Init.