public static IServiceCollection AddRobotify <TContentWriter, TRobotGroupsResolver>(this IServiceCollection serviceCollection, Action <RobotifyServiceConfigurer> configure) where TContentWriter : class, IRobotifyContentWriter where TRobotGroupsResolver : class, IRobotifyRobotsGroupsResolver
        {
            serviceCollection.AddOptions();
            serviceCollection.TryAddSingleton <IConfigureOptions <RobotifyOptions>, ConfigureRobotifyOptions>();
            serviceCollection.Configure <RobotifyOptions>(_ => { });
            serviceCollection.AddSingleton <ITagHelperComponent, RobotifyMetaTagHelperComponent>();

            var configurer = new RobotifyServiceConfigurer(serviceCollection);

            configure?.Invoke(configurer);

            return(serviceCollection.AddRobotifyServices <TContentWriter, TRobotGroupsResolver>());
        }
 /// <summary>
 /// Will attempt to read robot groups from the robotify appsettings configuration, from a node named "Groups" under "Robotify"
 /// </summary>
 /// <typeparam name="TAppender"></typeparam>
 /// <param name="configurer"></param>
 /// <returns></returns>
 public static RobotifyServiceConfigurer AddRobotGroupsFromAppSettings(this RobotifyServiceConfigurer configurer)
 {
     return(configurer.AddRobotGroupProvider <LoadFromAppSettingsRobotGroupProvider>());
 }
 /// <summary>
 /// Will include a standard disallow all robot group
 /// </summary>
 /// <typeparam name="TAppender"></typeparam>
 /// <param name="configurer"></param>
 /// <returns></returns>
 public static RobotifyServiceConfigurer AddDisallowAllRobotGroupProvider(this RobotifyServiceConfigurer configurer)
 {
     return(configurer.AddRobotGroupProvider <RobotifyDisallowAllRobotGroupProvider>());
 }
 public static RobotifyServiceConfigurer AddRobotGroupProvider <TAppender>(this RobotifyServiceConfigurer configurer)
     where TAppender : class, IRobotifyRobotGroupProvider
 {
     configurer.Services.AddScoped <IRobotifyRobotGroupProvider, TAppender>();
     return(configurer);
 }