动态更改对象的命名空间

时间:2013-01-27 09:41:11

标签: c# class object paypal

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

我知道网站是否在本地运行。

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

我想在此之间切换:

using DynoPayPal.PayPal;

而且:

using DynoPayPal.SandBoxPayPal;

例如,对象:PaymentDetailsItemType在第一种情况下将“成为”DynoPayPal.PayPal,在第二种情况下将成为DynoPayPal.SandBoxPayPal

1 个答案:

答案 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();
    }
}