我有以下实现
public class ContextService : IContextService
{
private readonly ICacheProvider _cache;
private readonly HttpClient _httpClient;
public ContextService(ICacheProvider cache, HttpClient httpClient)
{
_cache = cache;
_httpClient = httpClient;
}
public string GetAuthToken()
{
// Logic to obtain an auth token
// ...
// Code that must be executed if we're running on a dev machine
InitializeContextInLocalEnvironment(auth.Token);
return auth.Token;
}
}
问题是方法InitializeContextInLocalEnvironment(string)
。当代码在开发人员机器上运行时,它会运行一些东西,但在其他地方(例如测试服务器)运行时则不会运行。
通过控制反转,我会创建IContextService
的另一个实现,对吧?只有当代码在开发机器上运行时才会注入。我可以通过在模块(Autofac)中组织绑定来完成此操作。但是有了这个新的实现,我会引入重复的代码,因为我需要来自ContextService
类的所有内容,加上来自InitializeContextInLocalEnvironment(string)
方法的逻辑。
我错过了什么?
答案 0 :(得分:1)
为什么不对ContextService进行子类化并覆盖GetAuth?使用ContextService中的所有内容创建一个抽象类,并实现差异。