Внедрение свойства для базового класса контроллера - PullRequest
11 голосов
/ 16 октября 2011

Я пытаюсь автоматически установить свойство на любом контроллере, производном от моего 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, так как конструкторы не наследуются .

Ответы [ 2 ]

14 голосов
/ 16 октября 2011

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

builder.RegisterControllers(typeof(MvcApplication).Assembly)
       .PropertiesAutowired();
0 голосов
/ 16 октября 2011

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

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

public DescendantClass ()
  : base() 
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...