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