我正在编写一个供内部使用的库。这个库的目的是抽象出对一些内部 REST API 的调用。在后台,我使用 Flurl 来提出请求。该库还提供扩展方法来设置 DI(Core Web)以轻松地将所有内容连接在一起(services.AddXYIntegration()
)。在 flurl 的情况下,我的库提供了DefaultHttpClientFactory
(inherits from IHttpClientFactory
) =>的实现X509ClientFactory
。为了避免使用我的库的应用程序的冲突或覆盖 DI,这些应用程序可能也使用 Flurl 进行 https 请求并希望为IHttpClientFactory
我创建一个空接口,只是为了“标记”我的库实现并在 DI 接线中使用它。
一点点代码:
public interface IX509HttpClientFactory : IHttpClientFactory
{
// empty interface, violates CA1040
}
public class X509HttpClientFactory : DefaultHttpClientFactory /* inherits from IHttpClientFactory */, IX509HttpClientFactory
{
// Implementation details...
}
因此,库不是注入X509HttpClientFactory
for ,而是IHttpClientFactory
为IX509HttpClientFactory
. IHttpClientFactory
仍然“可用于”注射。
我的问题不是针对 flurl 的,而是针对类似情况的一般性问题。
这是一个好的设计吗?您如何处理具有可配置的 3rd 方依赖项的这种情况?违反 CA1040 是否可行。