private static CommandBindingDescriptor FindDescriptor(IVerb verb, Type targetType) { if (verb == null) { verb = NullVerb.Instance; } var verbType = verb.GetType(); if (!commandBindings.ContainsKey(verbType)) { return(null); } var list = commandBindings[verbType]; CommandBindingDescriptor result = null; if (targetType != null) { result = list.FirstOrDefault(b => b.TargetType != null && b.TargetType == targetType); // exact matching if (result != null) { return(result); } result = list.FirstOrDefault(b => b.TargetType != null && b.TargetType.IsA(targetType)); // inheritance matching if (result != null) { return(result); } } return(list.FirstOrDefault(b => b.TargetType == null)); // non-typed commands }