避免重复代码与控制反转

时间:2017-03-15 19:09:29

标签: c# dependency-injection architecture inversion-of-control

我有以下实现

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)方法的逻辑。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

为什么不对ContextService进行子类化并覆盖GetAuth?使用ContextService中的所有内容创建一个抽象类,并实现差异。