## Work with module providers

With this sample, you learn to use the following APIs related to module providers:

1. Getting source links for the current site
2. Get the module providers using the module name
3. Get the default provider
4. Get a specific provider - the News provider (built-in) and for a dynamic module (`Press releases`)

```C#
using System.Collections.Generic;
using System.Linq;
using Telerik.Sitefinity.Modules.Libraries;
using Telerik.Sitefinity.Modules.News;
using Telerik.Sitefinity.Multisite;
using Telerik.Sitefinity.Services;

namespace SitefinityWebApp
{
    public partial class GetProvidersExample
    {
        public void GetContentProvidersForCurrentSite()
        {
            var multisiteContext = SystemManager.CurrentContext as MultisiteContext;

            // All data source links for current site
            List<MultisiteContext.SiteDataSourceLinkProxy> dataSources = multisiteContext.CurrentSite.SiteDataSourceLinks.ToList();

            string librariesDataSourceName = typeof(LibrariesManager).FullName; // "Telerik.Sitefinity.Modules.Libraries.LibrariesManager"

            // Get the module's providers by the module's name
            var currentSiteProv = multisiteContext.CurrentSite.GetProviders(librariesDataSourceName).Select(p => p.ProviderName);

            // Get the default provider
            var defaultProvider = multisiteContext.CurrentSite.GetDefaultProvider(librariesDataSourceName);

            // Get the providers for news for current site
            var newsSiteProvs = multisiteContext.CurrentSite.GetProviders(typeof(NewsManager).FullName).Select(p => p.ProviderName);

            // Get the providers for "Press releases" dynamic module for current site
            var pressReleasesSiteProvs = multisiteContext.CurrentSite.GetProviders("Press releases").Select(p => p.ProviderName);
        }
    }
}
```

## Enumerate all content providers enabled in all your sites

To enumerate all content providers and match them to the sites where they are enabled, perform the following:

1. To get all sites, use the `GetSites()` method and create a new `SiteRegion` class for each `ISite` returned by it.
2. To get the active modules in your Sitefinity CMS instance, use the `ActiveTypes` method, then get the name of their modules, and finally - filter out the distinct names of the modules.
3. To obtain the list of providers activated in a site, use the `GetProviders` method with the names of the dynamic modules obtained in the previous step.

```C#
using System.Collections.Generic;
using System.Linq;
using Telerik.Sitefinity.DynamicModules.Builder;
using Telerik.Sitefinity.Multisite;
using Telerik.Sitefinity.Services;

namespace SitefinityWebApp
{
    public partial class GetProvidersExample
    {
        public void EnumerateAllContentProviders()
        {
            var multisiteContext = SystemManager.CurrentContext as MultisiteContext;

            var sites = multisiteContext.GetSites();
            foreach (var site in sites)
            {
                using (new SiteRegion(site))
                {
                    var siteTypesAndProvides = this.GetProviders(site);

                    // use siteTypesAndProvides here
                    // ...
                }
            }
        }

        private IDictionary<string, string[]> GetProviders(ISite site)
        {
            var result = new Dictionary<string, string[]>();

            var dynamicModuleNames = ModuleBuilderManager.GetActiveTypes().Select(t => t.ModuleName).Distinct();
            foreach (var dynamicModuleName in dynamicModuleNames)
            {
                var typeProviders = site.GetProviders(dynamicModuleName);
                result.Add(dynamicModuleName, typeProviders.Select(p => p.ProviderName).ToArray());
            }

            return result;
        }
    }
}
```
