Устранение зависимости во время выполнения - PullRequest
0 голосов
/ 17 июня 2020

У меня проблема. net ядро, которое мне нужно для разрешения зависимости на основе значения, которое я получаю от API.

Интерфейс

public interface IBookingSettingsDetails
{
     void GetSettings();
}

Класс A

public  class ScheduleSettingsA: IBookingSettingsDetails
{
        public void GetSettings() {}
}

Класс B

public  class ScheduleSettingsB: IBookingSettingsDetails
{
        public void GetSettings() {}
}

Резолвер в файле startup.cs -

            services.AddTransient<Func<int, IBookingSettingsDetails>>(serviceProvider => conferencingType =>
            {
                switch (conferencingType)
                {
                    case 1:
                        return serviceProvider.GetService<ScheduleSettings>();
                    case 2:
                        return serviceProvider.GetService<WebexSettings>();
                    default:
                        throw new InvalidOperationException();
                }
            });

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

public class VideoConferenceController : ControllerBase
    {
        private readonly Func<int, IBookingSettingsDetails> _serviceAccessor;

        public VideoConferenceController(Func<int, IBookingSettingsDetails> serviceAccessor)
        {
            _serviceAccessor = serviceAccessor;
        }


        [HttpGet]
        [Route("getRandom")]
        public void getRandom(int conferenceType)
        {
            var service= _serviceAccessor(conferenceType);
            service.GetSettings();
        }
}

Я хочу разрешить зависимость на основе параметра, указанного в функции. Я не хочу использовать какие-либо сторонние библиотеки, такие как Unity. Можно ли это сделать, используя описанный выше подход?

1 Ответ

1 голос
/ 17 июня 2020

Чтобы решить эту проблему. Я только что добавил

services.AddTransient<ScheduleSettingsA>();
services.AddTransient<ScheduleSettingsB>();

в файл запуска.

...