using Microsoft.Practices.ServiceLocation; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; /// /// Contains extension methods. /// public static class IServiceLocatorExtensions { /// /// Gets all registered instances. /// /// The service locator. /// public static List GetAllInstances(this IServiceLocator locator) { var dictionaries = locator.GetType().GetField("_instancesRegistry", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(locator) as Dictionary>; var instances = dictionaries.SelectMany(x => x.Value).Select(x => x.Value).ToList(); return instances; } /// /// Gets all instances by the specified base type T. /// /// Base type /// The service locator. /// public static List GetAllInstancesByBase(this IServiceLocator locator) { return locator.GetAllInstances().Where(x => x != null && typeof(T).IsAssignableFrom(x.GetType())).Select(x => (T)x).ToList(); } }