C# 如何对表示可组合行为的依赖项使用依赖项注入?

C# 如何对表示可组合行为的依赖项使用依赖项注入?,c#,dependency-injection,composition,C#,Dependency Injection,Composition,我正在编写一个ASP.NETWebAPI Web服务,它需要对其他Web服务进行REST调用。该类支持通过传入可实现发送前和发送后功能的来更改其行为 我想利用HttpClient的组合属性,根据我调用的web服务添加各种行为集。因此,类ServiceA知道它将要调用的外部服务需要向HttpClient添加哪些行为,而类ServiceB知道它需要添加哪些行为 我还想使用依赖项注入为ServiceA或ServiceB实例提供其所需的HttpClient实例,以便可以轻松模拟这些依赖项进行单元测试 我

我正在编写一个ASP.NETWebAPI Web服务,它需要对其他Web服务进行REST调用。该类支持通过传入可实现发送前和发送后功能的来更改其行为

我想利用HttpClient的组合属性,根据我调用的web服务添加各种行为集。因此,类ServiceA知道它将要调用的外部服务需要向HttpClient添加哪些行为,而类ServiceB知道它需要添加哪些行为

我还想使用依赖项注入为ServiceA或ServiceB实例提供其所需的HttpClient实例,以便可以轻松模拟这些依赖项进行单元测试

我所开始的工作是创建一个接口类,它表示每一组组合行为,这样我就可以将接口直接放入服务类的构造函数中:

public interface IFooBarHttpClient
{
    HttpResponseMessage SendAsync( HttpRequestMessage ); // etc
}
public class ServiceA
{
    public ServiceA( IFooBarHttpClient httpclient ) {}
}
然后使用从HttpClient继承的类实现该接口,并在调用基类构造函数时添加所需的DelegatingMessageHandler

我认为这种方法存在两个问题:

  • 每当我需要其他行为组合时,我都需要为该特定组合创建一个新的接口和实现类。命名每个新接口/实现时,这确实成为一个问题
  • 我觉得这是在滥用打字系统。除了名称之外,接口本身完全相同。接口实际上只是IoC容器的配置标签
  • 理想情况下,我希望这样(Foo和Bar是消息处理程序,即可组合行为):

    公共类服务a
    {
    公共服务a(IHttpClienthttpclient){}
    }
    
    对于以这种方式构成行为的类,是否有合理的方法使用依赖项注入?或者我应该换一个方向思考吗?

    请参阅这些文章和
    public class ServiceA
    {
        public ServiceA( IHttpClient< Foo, Bar > httpclient ) {}
    }