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. Однако работает внедрение зависимостей через конструктор. Что я делаю не так?
  • Вопрос задан
  • 220 просмотров
Пригласить эксперта
Ответы на вопрос 1
@basrach
.RegisterType().As().PropertiesAutowired()

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

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

Похожие вопросы