/// <summary> /// Find matching interface by name C# interface name convention. Optionally use a filter. /// </summary> /// <param name="typeInfo"></param> /// <param name="action"></param> /// <returns></returns> public static IEnumerable <Type> FindMatchingInterface(this TypeInfo typeInfo, Action <TypeInfo, IImplementationTypeFilter> action) { var matchingInterfaceName = $"I{typeInfo.Name}"; var matchedInterfaces = GetImplementedInterfacesToMap(typeInfo) .Where(x => string.Equals(x.Name, matchingInterfaceName, StringComparison.Ordinal)) .ToArray(); Type type; if (action != null) { var filter = new ImplementationTypeFilter(matchedInterfaces); action(typeInfo, filter); type = filter.Types.FirstOrDefault(); } else { type = matchedInterfaces.FirstOrDefault(); } if (type != null) { yield return(type); } }
private IServiceTypeSelector AddFilter(IEnumerable <Type> types, Action <IImplementationTypeFilter> action) { var filter = new ImplementationTypeFilter(types); action(filter); return(AddSelector(filter.Types)); }
public IServiceTypeSelector AddClasses(Action <IImplementationTypeFilter> action, bool publicOnly) { Preconditions.NotNull(action, nameof(action)); var classes = GetNonAbstractClasses(publicOnly); var filter = new ImplementationTypeFilter(classes); action(filter); return(AddSelector(filter.Types)); }
public IServiceTypeSelector AddClasses(Action <IImplementationTypeFilter> action, bool publicOnly) { if (action == null) { throw new ArgumentNullException(nameof(action)); } var filter = new ImplementationTypeFilter(GetNonAbstractClasses(publicOnly)); action(filter); return(AddSelector(filter.Types)); }
public void AddFromAttributes(Action <IImplementationTypeFilter> action, bool publicOnly) { if (action == null) { throw new ArgumentNullException(nameof(action)); } var filter = new ImplementationTypeFilter(GetNonAbstractClasses(publicOnly)); action(filter); var selector = new AttributeSelector(filter.Types); Selectors.Add(selector); }