2

我在一个使用 C# 并允许在中心类中添加单独代码的内容管理系统中工作。出现的一个问题是我们希望为 QA 和站点的其余部分提供单独的代码库,目前我们使用文件夹结构将调用从一个类切换到另一个类

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

但我觉得这是完成这项任务的一种非常乏味的方式。有没有更好的方法来实现这一点?显然只是附加 InputHelper + "QA" 是行不通的,但有些事情我们只需要调用一次方法,而不必在调用周围包装 if else。

4

3 回答 3

1

你可以做得比:

1)有一个接口(你可能已经有,说实话)

public interface IInputHelper
{
    void Navigation();
}

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 回答
1

我会使用依赖注入。StructureMap(仅作为一个示例)将允许您通过配置文件指定为接口提供哪种具体类型。

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

于 2012-12-05T19:34:20.580 回答