0

我需要从外部 API 获取数据,只能通过 VPN 访问。开发/测试机器并不总是能够连接到 VPN。

期望的行为是使用两种不同的实现(一种调用实际的外部 API,另一种充当真实的东西但返回虚拟数据)。使用哪个实现将通过 web.config 中的标志进行配置

我已经尝试过 IoC 容器 StructureMap 和 Unity,它们都完成了这项工作,但它们似乎只适用于 MVC,我正在寻找一种也适用于 Web 表单的通用解决方案。而且,用它们来解决这个孤立的设计问题是不是有点矫枉过正!?

是否有针对此特定场景的设计模式或最佳实践方法?

4

2 回答 2

1

IoC / 依赖注入听起来像是正确的方法,但对于简单的场景,您不一定需要容器。关键是让依赖于 API 的类引用一个接口IAPI,并将其传递给实际的实现RealAPIFakeAPI.

public class SomeClass
{
    private readonly IAPI _api;

    public SomeClass(IAPI api)
    {
        _api = api;
    }
}

现在您应该能够通过将不同的对象传递给MyClass. 理论上,当您使用 IoC 方法时,您应该只需要在应用程序的顶层将接口绑定到实现一次。

于 2013-07-12T01:05:30.843 回答
0

将它们用于这个孤立的设计问题是不是有点矫枉过正!?

他们可能是。这些 IoC 容器仅在您编写松散耦合代码时才对您有所帮助。例如,如果您没有根据 SOLID 原则设计您的类,那么这些框架可能只会妨碍您。另一方面,哪个开发人员不想编写松耦合代码?换句话说,IoC 容器解决了您可能没有的问题,但这是一个很好的问题。

StructureMap 和 Unity [...] 似乎只适用于 MVC

这些 ioc 框架可以在任何类型的应用程序中使用(只要它是以松散耦合的方式编写的)。某些类型的应用程序需要更多的工作来插入框架,但它始终是可能的。StructureMap 和 Unity 可能只有 MVC 的集成包,在 ASP.NET Web 窗体中也很容易使用它们。

是否有针对此特定场景的设计模式或最佳实践方法?

您正在寻找的是Proxy 模式,也许是断路器模式

于 2013-07-12T07:55:28.117 回答