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 }
private static void AddCommandBinding <V, C>(Type acceptedTargetType = null, bool isDefaultBinding = false) where V : IVerb where C : ICommand { var verbType = typeof(V); List <CommandBindingDescriptor> list = null; if (commandBindings.ContainsKey(verbType)) { list = commandBindings[verbType]; } else { list = new List <CommandBindingDescriptor>(); commandBindings.Add(verbType, list); } var descriptor = CommandBindingDescriptor.Create <V, C>(acceptedTargetType, isDefaultBinding); list.Add(descriptor); }