我在服务引用上使用 PayPal 的服务。众所周知,有一个 PayPal 沙盒环境。
我知道网站是否在本地运行。
我的问题是我想通过环境动态改变类的命名空间(因为这两个类具有相同的功能)。最终我希望我不必更改任何代码,但是当站点在本地运行时沙箱会自动运行,而当他在服务器上运行时是真正的产品。
我想在这之间切换:
using DynoPayPal.PayPal;
还有这个:
using DynoPayPal.SandBoxPayPal;
因此对象:PaymentDetailsItemType
例如,在第一种情况下将"is"DynoPayPal.PayPal
,在第一种情况下将"is"DynoPayPal.SandBoxPayPal
第二种情况。
最佳答案
您不能更改类的 namespace 。这不是他们在那里的目的,这样做毫无意义。但是,正如对您的问题的评论所指出的,您正在寻找的是依赖注入(inject)。考虑一下:
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();
}
}
关于c# - 动态更改对象的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14546142/