private void BuildDictionaries()
        {
            using (TimerProfilerFacade.CreateTimerProfiler("Adding supported types"))
            {
                foreach (string providerName in _dataProviderNames)
                {
                    IEnumerable <Type> types = DataProviderPluginFacade.GetSupportedInterfaces(providerName);

                    bool writeableProvider = DataProviderPluginFacade.IsWriteableProvider(providerName);

                    foreach (Type type in types)
                    {
                        AddType(type, providerName, writeableProvider);
                    }


                    if (DataProviderPluginFacade.IsGeneratedTypesProvider(providerName))
                    {
                        IEnumerable <Type> generatedTypes = DataProviderPluginFacade.GetGeneratedInterfaces(providerName);

                        foreach (Type type in generatedTypes)
                        {
                            AddType(type, providerName, writeableProvider);

                            if (!_generatedInterfaceTypes.Contains(type))
                            {
                                _generatedInterfaceTypes.Add(type);
                            }
                        }
                    }
                }
            }


            using (TimerProfilerFacade.CreateTimerProfiler("Adding known interfaces"))
            {
                foreach (string providerName in _dataProviderNames)
                {
                    if (DataProviderPluginFacade.IsDynamicProvider(providerName))
                    {
                        IEnumerable <Type> knownTypes = DataProviderPluginFacade.GetKnownInterfaces(providerName);

                        foreach (Type knownType in knownTypes)
                        {
                            if (!_interfaceTypeToReadableProviderNames.Keys.Contains(knownType))
                            {
                                List <string> providerNames;

                                if (!_knownInterfaceTypeToDynamicProviderNames.TryGetValue(knownType, out providerNames))
                                {
                                    providerNames = new List <string>();

                                    _knownInterfaceTypeToDynamicProviderNames.Add(knownType, providerNames);

                                    if (RuntimeInformation.IsDebugBuild)
                                    {
                                        Log.LogVerbose("DataProviderRegistry", "Adding known IData interface: {0}", knownType);
                                    }
                                }

                                providerNames.Add(providerName);
                            }
                        }
                    }
                }
            }
        }