Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改对象';动态创建命名空间_C#_Class_Object_Paypal - Fatal编程技术网

C# 更改对象';动态创建命名空间

C# 更改对象';动态创建命名空间,c#,class,object,paypal,C#,Class,Object,Paypal,我使用PayPal的服务进行服务推荐。众所周知,它有一个PayPal沙箱环境 我知道一个站点是否在本地运行 我的问题是,我希望通过环境动态更改类的名称空间(因为这两个类具有相同的函数)。最终,我希望我不必更改任何代码,但一旦站点由本地运行时,沙盒将自动运行,而当他在服务器上运行时,才是真正的产品 我想在这两者之间切换: using DynoPayPal.PayPal; 这是: using DynoPayPal.SandBoxPayPal; 例如,对象:PaymentDetailSiteTyp

我使用PayPal的服务进行服务推荐。众所周知,它有一个PayPal沙箱环境

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

我的问题是,我希望通过环境动态更改类的名称空间(因为这两个类具有相同的函数)。最终,我希望我不必更改任何代码,但一旦站点由本地运行时,沙盒将自动运行,而当他在服务器上运行时,才是真正的产品

我想在这两者之间切换:

using DynoPayPal.PayPal;
这是:

using DynoPayPal.SandBoxPayPal;

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

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

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

这就需要依赖注入……正如@SimonWhitehead所说,这看起来确实是DI的主要候选。
SandBoxPayPal
PayPal
是否实现了一些公共接口?或者它们至少实现了相同的方法吗?它们都有相同的功能。它们之间的差异与配置(端点)有关。为什么它们是不同的类型,而不是在执行时获取或获得它们的配置?似乎您应该能够只拥有一个服务引用,然后更改连接字符串(web.confg?app.config)从沙箱到paypals端的生产点。(只是猜测,我不熟悉他们的API)