public Dictionary <Type, List <Type> > FindImplementations <TInterface>(Func <Type, Type, bool> filter) { var implementations = Container.Resolve <TInterface>(); var implDict = new Dictionary <Type, List <ConceptImplementation <TInterface> > >(); foreach (var impl in implementations) { var ci = new ConceptImplementation <TInterface>(impl); if (ci.ImplementsType != null) { List <ConceptImplementation <TInterface> > conceptImplList; if (!filter(ci.Type, ci.ImplementsType)) { continue; } if (!implDict.TryGetValue(ci.ImplementsType, out conceptImplList)) { implDict.Add(ci.ImplementsType, conceptImplList = new List <ConceptImplementation <TInterface> >()); } conceptImplList.Add(ci); } } var dict = new Dictionary <Type, List <Type> >(); foreach (var type in implDict.Keys) { var list = implDict[type]; var conceptImpls = list.Count > 1 ? Sort(list.ToDictionary(it => it.Type)).ToList() : list; dict.Add(type, new List <Type>(UseInsteadOfImplementations(conceptImpls).Select(ci => ci.Type))); } return(dict); }
public IEnumerable <Type> FindPlugins <TService>(Func <Type, Type, bool> filter) { var implementations = Container.Resolve <TService>(); var dict = new Dictionary <Type, ConceptImplementation <TService> >(); try { foreach (var impl in implementations) { var ci = new ConceptImplementation <TService>(impl); if (filter(ci.Type, ci.ImplementsType)) { dict[ci.Type] = ci; } } } catch (DependencyResolutionException ex) { if (ex.InnerException != null) { throw new FrameworkException("Error loading plugins for " + typeof(TService).FullName + ". " + ex.InnerException.Message, ex.InnerException); } throw new FrameworkException("Error loading plugins for " + typeof(TService).FullName, ex); } return(Sort(dict).Select(ci => ci.Type).ToList()); }
public IEnumerable <Type> FindPlugins <TService>(Func <Type, Type, bool> filter) { var implementations = Container.Resolve <TService>(); var dict = new Dictionary <Type, ConceptImplementation <TService> >(); try { foreach (var impl in implementations) { object md; if (impl.Metadata.TryGetValue(Metadata.Implements, out md)) { var multiple = md as Type[] ?? new[] { md as Type }; foreach (var type in multiple) { var ci = new ConceptImplementation <TService>(impl, type); if (filter(ci.Type, type)) { dict[ci.Type] = ci; } } } else { var ci = new ConceptImplementation <TService>(impl, null); if (filter(ci.Type, null)) { dict[ci.Type] = ci; } } } } catch (DependencyResolutionException ex) { if (ex.InnerException != null) { throw new FrameworkException("Error loading plugins for " + typeof(TService).FullName + ". " + ex.InnerException.Message, ex.InnerException); } throw new FrameworkException("Error loading plugins for " + typeof(TService).FullName, ex); } return(Sort(dict).Select(ci => ci.Type).ToList()); }
/// <summary> /// For logging. /// </summary> public override string ToString() => ConceptInfo.GetKey() + "/" + ConceptImplementation.GetType().Name;