public object GetResult <TKEY, T>(PpsShellWpf shell) where TKEY : ResourceKey { var result = shell.FindResourceByKey <TKEY, T>(); // order result if (Order || Comparer != null) { if (Comparer != null) { if (Comparer is IComparer <T> comparer) { result = result.OrderBy(c => c, comparer); } else { throw new ArgumentOutOfRangeException(nameof(Comparer), $"Comparer does not implement '{typeof(IComparer<T>).GetType().Name}'."); } } else if (typeof(IComparable <T>).IsAssignableFrom(typeof(T))) { result = result.OrderBy(c => c); } else { throw new ArgumentOutOfRangeException(nameof(Comparer), $"Resource does not implement '{typeof(IComparable<T>).GetType().Name}'."); } } return(CreateArray ? result.ToArray() : result); } // func GetResult
} // ctor /// <summary></summary> /// <param name="e"></param> protected override void OnInitialized(EventArgs e) { var env = PpsShellWpf.GetShell(this); CommandManager.AddExecutedHandler(this, env.DefaultExecutedHandler); CommandManager.AddCanExecuteHandler(this, env.DefaultCanExecuteHandler); base.OnInitialized(e); } // proc OnInitialized
} // func GetResult /// <summary></summary> /// <param name="serviceProvider"></param> /// <returns></returns> public override object ProvideValue(IServiceProvider serviceProvider) { // find shell var rootObject = serviceProvider.GetService <IRootObjectProvider>(true); var shell = PpsShellWpf.GetShell((DependencyObject)rootObject.RootObject); // make select method var m = findResourceKeyMethodInfo.MakeGenericMethod(ResourceKeyType, ResourceType ?? typeof(object)); return(m.Invoke(this, new object[] { shell })); } // func ProvideValue