我有一个通用接口IApiService,负责对其他服务器进行GET调用。我有三个要求:
我的想法是引入以下层次结构:
self._connection.drain_events()
对于案例1,我使用 ICachedApiService ;对于案例2,我使用 IDirectApiService ;对于案例3,我使用 IApiService 。
我使用.NET Core默认依赖项注入框架。这是我对 ICachedApiService 的配置:
public interface IApiService<T> where T : class
{
Task<T> GetAsync(IRequestParameters requestParameters);
}
public interface ICachedApiService<T> : IApiService<T> where T : class
{
}
public interface IDirectApiService<T> : IApiService<T> where T : class
{
}
对于 IDirectApiService ,情况有所不同,我必须对每种通用类型使用lambda方法
serviceCollection.AddScoped(typeof(ICachedApiService<>), typeof(CachedApiService<>);
问题是如何配置 IApiService 以使用 IDirectApiService 或 ICachedApiService ? 对于 ICachedApiService ,它很简单:
serviceCollection.AddScoped<IDirectApiService<ProductDTO>>(serviceProvider => new
DirectApiService<ProductDTO> (
ProductsEndpoint // and other type specific data
));
对于 IDirectApiService ,我不希望为每种具体类型重复配置,因为这很容易出错,并且如果要切换到缓存版本,还需要进行更多更改。任何依赖注入框架都有可能吗?有什么方法可以获取getService中缺少的通用参数吗?
serviceCollection.AddScoped(typeof(IApiService<>), typeof(CachedApiService<>));