Подтвердить что ты не робот

Инъекция свойств для базового контроллера

Я пытаюсь автоматически установить свойство на любом контроллере, который происходит из моего класса BaseController. Вот код в моем методе Application_Start. Свойство UnitOfWork всегда имеет значение null при попытке доступа к нему.

var builder = new ContainerBuilder();
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterType<VesteraTechnologiesContext>().As<IContext>();
builder.RegisterType<UnitOfWork>().As<IUnitOfWork>();
builder.RegisterType<BaseController>()
       .OnActivated(c => c.Instance.UnitOfWork = c.Context.Resolve<IUnitOfWork>());
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

Вот что выглядит BaseController

public class BaseController : Controller
{
    public IUnitOfWork UnitOfWork { get; set; }
}

Причина, по которой я пытаюсь сделать это через свойство, а не через конструктор, заключается в том, что мне не нужно дублировать конструктор в каждом контроллере, которому нужен доступ к свойству UnitOfWork, поскольку конструкторы не наследуются.

4b9b3361

Ответ 1

Autofac по умолчанию регистрирует контроллеры для использования инъекции конструктора. Чтобы включить вложение свойств с autofac: вы должны использовать:

builder.RegisterControllers(typeof(MvcApplication).Assembly)
       .PropertiesAutowired();

Ответ 2

поскольку конструкторы не наследуются.

Обычно можно вызвать базовый конструктор следующим образом:

public DescendantClass ()
  : base() 
{
}