【发布时间】: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<T>扩展方法。相反,请致电GetRequiredService<T>。
标签: asp.net-core .net-core dependency-injection dependencies