我在服务参考上使用PayPal的服务。众所周知,有一个PayPal SandBox环境。
我知道网站是否在本地运行。
我的问题是我想通过环境动态更改类的命名空间(因为这两个类具有相同的功能)。最终我希望我不必更改任何代码,但是当本地运行本地沙箱时会自动更新,当他在服务器上运行时,真正的产品将是。
我想在此之间切换:
using DynoPayPal.PayPal;
而且:
using DynoPayPal.SandBoxPayPal;
例如,对象:PaymentDetailsItemType
在第一种情况下将“成为”DynoPayPal.PayPal
,在第二种情况下将成为DynoPayPal.SandBoxPayPal
。
答案 0 :(得分: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();
}
}