IDataProviderFactory GetProviderFactory(Type type) { if (TypeProviderFactories.TryGetValue(type, out var factory)) { return(factory); } if (AssemblyProviderFactories.TryGetValue(type.Assembly, out var result)) { return(result); } return(null); }
static List <IDataProvider> ResolveDataProviders(Type baseType) { var factories = AssemblyProviderFactories.Where(f => f.Value.SupportsPolymorphism() && f.Key.References(baseType.Assembly)).ToList(); var result = new List <IDataProvider>(); foreach (var f in factories) { result.Add(f.Value.GetProvider(baseType)); } foreach (var type in EntityFinder.FindPossibleTypes(baseType, mustFind: factories.None())) { result.Add(GetProvider(type)); } return(result); }