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

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

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

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

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

public class WeatherService : IWeatherService
{
    /******/
    
    protected virtual async Task<T> GetWeatherDataAsync<T>(string endpoint) where T : class
    {
        /******/
    }
}

public class CurrentWeatherService : WeatherService, ICurrentWeatherService
{
    /******/
    
    protected override async Task<T> GetWeatherDataAsync<T>(string endpoint)
    {
        return await base.GetWeatherDataAsync<T>(endpoint);
    }
}


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

gtlvzcf8

gtlvzcf81#

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

public class CurrentWeatherService : ICurrentWeatherService
{
    private readonly IWeatherService _weatherService;

    public CurrentWeatherService(IWeatherService weatherService)
    {
        _weatherService = weatherService
            ?? throw new ArgumentNullException(nameof(weatherService));
    }

    public async Task<T> GetWeatherDataAsync<T>(string endpoint)
    {
        return await _weatherService.GetWeatherDataAsync<T>(endpoint);
    }
}

字符串

相关问题