0

Service References で PayPal のサービスを使用しています。PayPal SandBox 環境があることが知られています。

サイトがローカルで実行されているかどうかはわかっています。

私の問題は、環境によってクラスの名前空間を動的に変更したいということです (2 つのクラスは同じ機能を持っているため)。最終的にはコードを変更する必要はありませんが、サイトがローカルで実行されるとサンドボックスが自動的に実行され、サーバーで実行されると実際の製品になります。

これを切り替えたい:

using DynoPayPal.PayPal;

この:

using DynoPayPal.SandBoxPayPal;

そのため、オブジェクト:PaymentDetailsItemTypeたとえば、DynoPayPal.PayPal最初のケースでは "be" になりDynoPayPal.SandBoxPayPal、2 番目のケースでは "be" になります。

4

1 に答える 1

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();
    }
}
于 2013-01-27T10:11:58.553 に答える