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;
        }
    }
}
Want to learn more?
Enhance your Sitefinity skills by enrolling in free training sessions. Become Sitefinity certified through Progress Education Community to strengthen your professional credentials.