2

私は、C# を使用し、中央クラスに個別のコードを追加できるコンテンツ管理システムで作業しています。発生した問題の 1 つは、QA 用とサイトの残りの部分用に別のコード ベースを用意したいということです。現在、フォルダー構造を使用して、呼び出しをあるクラスから別のクラスに切り替えています。

if (AssetPath == "Websites QA")
{
    InputHelperQA.Navigation();//Calling Navigation Section From Helper Class
}
else
{
    InputHelper.Navigation();
}

しかし、このタスクを実行するのは非常に面倒な方法だと思います。これを達成するためのより良い方法はありますか?、明らかに InputHelper + "QA" を追加するだけでは機能しませんが、呼び出しの周りに if else をラップする代わりに、メソッドを 1 回だけ呼び出す必要があるという行に沿った何かがあります。

4

3 に答える 3

1

依存性注入を使用します。StructureMap(ほんの一例として)を使用すると、構成ファイルを介してインターフェイスに提供する具体的なタイプを指定できます。

http://docs.structuremap.net/XmlConfiguration.htm

于 2012-12-05T19:34:20.580 に答える
1

あなたはより悪いことをすることができます:

1) インターフェースを持っている (すでに持っているかもしれませんが、正直なところ)

public interface IInputHelper
{
    void Navigation();
}

2) すでに持っているように、2 つのインスタンスを派生させます。

public class InputHelper : IInputHelper { }
public class InputHelperQA : IInputHelper { }

3) ある種のディスパッチ マネージャーを作成します。

public sealed class InputDispatch
{
    private Dictionary<string, IInputHelper> dispatch_ = new Dictionary<string, IInputHelper>(StringComparer.OrdinalIgnoreCase);

    public InputDispatch()
    {
        dispatch_["Websites QA"] = new InputDispatchQA();
        dispatch_["Default"] = new InputDispatch();
    }

    public void Dispatch(string type)
    {
        Debug.Assert(dispatch_.ContainsKey(type));
        dispatch_[type].Navigation();
    }
}
于 2012-12-05T19:15:58.520 に答える
1

環境を表すブランチである以外に、環境ごとに個別のコードを持つべきではありません。

構成ファイルまたはデータベースに構成を保存する必要があります。

于 2012-12-05T18:08:18.557 に答える