c# - 动态更改对象的命名空间

标签 c# class object paypal

我在服务引用上使用 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/

相关文章:

C# 相当于 Java Robot 类

c# - ConcurrentBag 的正确用法是什么?

c# - 通用存储库扩展 : Inheritance vs. 扩展方法

java - 为什么对象分配引用内存位置,而基本类型则不然?

string - jsonstring 和 json 对象的区别

javascript - 向js中函数内部的对象添加方法

c# - 使用三元运算构建字符串

ruby - Rubocop 错误 'Class definition is too long ruby'

Python调用父方法多重继承

python - 类在 2.4 中不起作用