Autofac - вставляет свойства в контроллер asp.net mvc - PullRequest
5 голосов
/ 05 мая 2011

У меня есть базовый контроллер, от которого наследуются все мои контроллеры.У этого базового контроллера есть некоторые свойства, которые я бы хотел внедрить с помощью свойства using.

Моя регистрация контроллера выглядит следующим образом

builder.RegisterControllers(Assembly.GetExecutingAssembly()

Я не знаю, как получить доступ к базовому классу ивведите свойства.

Ответы [ 5 ]

8 голосов
/ 03 февраля 2012

Это должно работать:

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

Дополнительная информация на веб-сайте autofac: http://code.google.com/p/autofac/wiki/PropertyInjection

5 голосов
/ 05 мая 2011

Вы можете рассмотреть возможность использования Agofate Aggregate Service :

Агрегатная служба полезна, когда вам нужно рассматривать набор зависимостей как одну зависимость. Когда класс зависит от нескольких сервисов с внедрением конструктора или имеет несколько сервисов с внедрением свойства, перемещение этих сервисов в отдельный класс приводит к более простому API.

Примером является супер- и подклассы, где суперкласс имеет одну или несколько зависимостей, введенных конструктором. Подклассы обычно должны наследовать эти зависимости, даже если они могут быть полезны только для суперкласса. С агрегированным сервисом параметры конструктора суперкласса могут быть объединены в один параметр, уменьшая повторяемость в подклассах. Другим важным побочным эффектом является то, что подклассы теперь изолированы от изменений в зависимостях суперкласса, введение новой зависимости в суперклассе означает только изменение совокупного определения сервиса.

3 голосов
/ 05 мая 2011

Это работает для меня:

using Autofac;
using Autofac.Integration.Web;
using Autofac.Integration.Web.Mvc;    

builder.RegisterType<ExtensibleActionInvoker>().As<IActionInvoker>();
builder.RegisterControllers(Assembly.GetExecutingAssembly()).InjectActionInvoker();
2 голосов
/ 12 августа 2014

Никвэйн ответ правильный.Просто убедитесь, что

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

после того, как все ваши зависимости зарегистрированы.Или, другими словами, прямо перед сборкой контейнера.

Таким образом, окончательный код будет выглядеть как

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

var container = builder.Build();
1 голос
/ 23 января 2014

Необходимо также позвонить в MVC:

DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

Для веб-API:

HttpConfiguration config = GlobalConfiguration.Configuration;
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
...