模式和编码风格,以避免在编码中使用Switch语句

时间:2016-05-12 03:44:12

标签: c# design-patterns coding-style

请考虑以下代码。我想根据service的{​​{1}}创建type。我已为此创建binding案例,但我对此方法不满意,我希望避免 switch语句以便将来扩展。请建议更好的模式或设计来做到这一点。

switch

1 个答案:

答案 0 :(得分:4)

我删除switch语句最明显的方法是使用Dictionary

以下是:

private static Dictionary<string, Func<string, object>> _bindingFactory = new Dictionary<string, Func<string, object>>()
{
    { "ServiceA", binding => new ChannelFactory<IServiceA>(binding).CreateChannel() },
    { "ServiceB", binding => new ChannelFactory<IServiceB>(binding).CreateChannel() },
    { "", binding => new ChannelFactory<IServiceC>(binding).CreateChannel() },
};

public static object CreateBinding(string binding, object service)
{
    service = _bindingFactory[_bindingFactory.ContainsKey(binding) ? binding : ""](binding);
    OpenChannel(service);
    return service;
}

object service作为CreateBinding的参数,有点奇怪,但我已按原样离开了。

现在,您完全可以在运行时更改_bindingFactory以产生您喜欢的任何类型的可扩展性。