0

我在服务参考上使用 PayPal 的服务。众所周知,有一个 PayPal SandBox 环境。

我知道一个站点是否在本地运行。

我的问题是我想通过环境动态改变类的命名空间(因为这两个类的功能相同)。最终我希望我不必更改任何代码,但是当站点由本地运行时,沙箱会自动运行,而当他在服务器上运行时,它会是真正的产品。

我想在这之间切换:

using DynoPayPal.PayPal;

还有这个:

using DynoPayPal.SandBoxPayPal;

这样对象:PaymentDetailsItemType例如,DynoPayPal.PayPal在第一种情况下将“是”,而DynoPayPal.SandBoxPayPal在第二种情况下。

4

1 回答 1

2

您不能更改类的命名空间。这不是他们的目的,这样做毫无意义。但是,正如您对问题的评论所指出的那样,您正在寻找的是依赖注入。考虑一下:

public interface IPayPal
{
    void aMethod();
}


public class PayPal : IPayPal { /* ... */ }
public class SandboxPayPal : IPayPal { /* ... */ }

然后我们也许可以设想一个类,它将根据环境为我们提供正确的类:

public sealed class PayPalFactory
{
    public IPayPal Create()
    {
        if(EnvironmentIsLive) // replace this with a proper check!
            return new PayPal();
        else
            return new SandboxPayPal();
    }
}
于 2013-01-27T10:11:58.553 回答