我正在使用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行为可以解释这一点?
任何见解或建议将不胜感激。
1条答案
按热度按时间gtlvzcf81#
你不使用DI。相反,你使用继承。要使用DI,你应该重写你当前的天气服务实现:
字符串