/// <summary> /// Returns method's return type or in case the return type is a type of Provider, /// then returns the provided type. /// </summary> public static Type GetMethodReturnType(MethodInfo method) { var type = method.ReturnType; var providedType = ProvidersCreator.GetProvidedType(type); return(providedType ?? type); }
public static ProvidersCreator GetCreator(Type type) { if (creatorCache.TryGetValue(type, out var creator)) { return(creator); } var providerCreator = new ProvidersCreator(); providerCreator.providerFields = type .GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance) .Where(field => ProviderBaseType.IsAssignableFrom(field.FieldType)) .ToArray(); creatorCache[type] = providerCreator; return(providerCreator); }
public static IDataProviderObject TypeDataProviderObject(IDataProviderObject obj, Func <Type, bool> typeFilter) => ProvidersCreator.GetProviderTypes(obj.GetType()).Any(typeFilter) ? obj : null;
public static Providers Build(object obj) => new Providers { providers = ProvidersCreator.GetCreator(obj.GetType()).Create(obj) };