与ASP.NET Core DI的服务依赖关系引用不一致

juzqafwq  于 2023-11-20  发布在  .NET
关注(0)|答案(1)|浏览(212)

我正在使用DI设置处理ASP.NET Core应用程序,遇到了一个与依赖项引用相关的问题,这些依赖项引用的行为不符合预期。
我有一系列在DI容器中使用Singleton注册的服务和接口。具体来说,我有一个WeatherService和一个继承自WeatherService的子类CurrentWeatherService。这两个服务都注册为Singleton。
下面是我的程序中的简化设置:

  1. services.AddSingleton<IWeatherService, WeatherService>();
  2. services.AddSingleton<ICurrentWeatherService, CurrentWeatherService>();

字符串
现在,当我直接访问WeatherService以及使用base关键字通过CurrentWeatherService访问WeatherService时,我注意到它们没有引用相同的示例,尽管它们已注册为Singleton。可能是什么导致了这个问题?我希望它们共享同一个示例。
下面是我的类的基本结构:

  1. public class WeatherService : IWeatherService
  2. {
  3. /******/
  4. protected virtual async Task<T> GetWeatherDataAsync<T>(string endpoint) where T : class
  5. {
  6. /******/
  7. }
  8. }
  9. public class CurrentWeatherService : WeatherService, ICurrentWeatherService
  10. {
  11. /******/
  12. protected override async Task<T> GetWeatherDataAsync<T>(string endpoint)
  13. {
  14. return await base.GetWeatherDataAsync<T>(endpoint);
  15. }
  16. }


在我的Dependency Injection设置中是否有我可能遗漏的东西或任何已知的.NET Core行为可以解释这一点?
任何见解或建议将不胜感激。

gtlvzcf8

gtlvzcf81#

你不使用DI。相反,你使用继承。要使用DI,你应该重写你当前的天气服务实现:

  1. public class CurrentWeatherService : ICurrentWeatherService
  2. {
  3. private readonly IWeatherService _weatherService;
  4. public CurrentWeatherService(IWeatherService weatherService)
  5. {
  6. _weatherService = weatherService
  7. ?? throw new ArgumentNullException(nameof(weatherService));
  8. }
  9. public async Task<T> GetWeatherDataAsync<T>(string endpoint)
  10. {
  11. return await _weatherService.GetWeatherDataAsync<T>(endpoint);
  12. }
  13. }

字符串

展开查看全部

相关问题