【问题标题】:Resolve dependency at runtime在运行时解决依赖关系
【发布时间】:2020-10-07 07:10:39
【问题描述】:

我在 .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 这样的第三方库。用上面的方法可以做到吗?

【问题讨论】:

  • 是的,我试过了,但是在解决时,我总是得到空值。 Startup.cs,我觉得一切都很好。
  • 谢谢,问题已解决。我没有将类添加到瞬态中。感谢您帮助我。
  • 欢迎贾恩先生。
  • 您应该几乎永远使用GetService&lt;T&gt; 扩展方法。相反,请致电GetRequiredService&lt;T&gt;

标签: asp.net-core .net-core dependency-injection dependencies


【解决方案1】:

解决这个问题。我刚刚添加了

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

在启动文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    相关资源
    最近更新 更多