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);
        }