请考虑以下代码。我想根据service
的{{1}}创建type
。我已为此创建binding
案例,但我对此方法不满意,我希望避免 switch
语句以便将来扩展。请建议更好的模式或设计来做到这一点。
switch
答案 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
以产生您喜欢的任何类型的可扩展性。