将通用接口的实例化转发到其他通用接口

时间:2018-11-15 14:15:12

标签: c# dependency-injection .net-core asp.net-core-2.0

我有一个通用接口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<>));

0 个答案:

没有答案