zergon321
@zergon321

Почему не работает Property injection в ASP.NET Core MVC через Autofac?

У меня есть интерфейс ILol и класс Lol, реализующий его, а так же контроллер:

public class UniversityController : Controller
    {
        public ILol Lol { get; set; }

        public IActionResult Index()
        {
            ViewData["Header"] = "Hello, world!";
            ViewData["NullCheck"] = Lol == null ? "It's null" : Lol.GetLol();

            return View();
        }
    }


Вот так выглядит часть моего класса Startup:

Код внедрения зависимостей
public IContainer ApplicationContainer { get; private set; }

        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public IServiceProvider ConfigureServices(IServiceCollection services)
        {
            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

            // Dependency resolving.
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
            
            ContainerBuilder builder = new ContainerBuilder();
            
            builder.RegisterType<Lol>().As<ILol>().PropertiesAutowired().InstancePerLifetimeScope();
            builder.Populate(services);

            IContainer container = builder.Build();

            ApplicationContainer = container;

            return new AutofacServiceProvider(container);
        }


Однако внедрение зависимостей не работает, и свойство Lol в классе контроллера остается null. Однако работает внедрение зависимостей через конструктор. Что я делаю не так?
  • Вопрос задан
  • 57 просмотров
Пригласить эксперта
Ответы на вопрос 1
@basrach
.RegisterType().As().PropertiesAutowired()

Этим самым вы сказали, что хотите чтобы Autofac, при создании экземпляра класса Lol произвел инъекцию во всего его (объекта Lol) публичные свойства. Чтобы работал ваш пример, нужно сделать тоже самое но для типа UniversityController.
А вообще лучше не использовать инъекцию через свойства. Никогда.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Hunt4You Севастополь
от 60 000 до 120 000 руб.
Fmedia Санкт-Петербург
от 120 000 до 150 000 руб.