Beispiel #1
0
 public static void WithSmartConventions(this IConventionScanner scanner, bool lowercase)
 {
     scanner.PrimaryKeysNamed(y => ToLowerIf(y.Name + "Id", lowercase));
     scanner.TablesNamed(y => ToLowerIf(Inflector.MakePlural(y.Name), lowercase));
     scanner.Columns.Named(x => ToLowerIf(x.Name, lowercase));
     scanner.Columns.ForceDateTimesToUtcWhere(x => x.GetMemberInfoType() == typeof(DateTime) || x.GetMemberInfoType() == typeof(DateTime?));
 }
Beispiel #2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ConventionListCommand" /> class.
 /// </summary>
 public ConventionListCommand(
     IConventionScanner scanner,
     IAssemblyCandidateFinder assemblyCandidateFinder
     )
 {
     _scanner = scanner;
     _assemblyCandidateFinder = assemblyCandidateFinder;
 }
 /// <summary>
 /// Withes the specified scanner.
 /// </summary>
 /// <param name="scanner">The scanner.</param>
 /// <returns>RocketHostBuilder.</returns>
 internal RocketHostBuilder With(IConventionScanner scanner) => new RocketHostBuilder(
     Builder,
     scanner,
     AssemblyCandidateFinder,
     AssemblyProvider,
     DiagnosticSource,
     ServiceProperties
     );
 public CCBuilder(
     IConventionScanner scanner,
     IAssemblyProvider assemblyProvider,
     IAssemblyCandidateFinder assemblyCandidateFinder,
     IServiceProviderDictionary properties
     ) : base(scanner, assemblyProvider, assemblyCandidateFinder, properties)
 {
 }
Beispiel #5
0
 public HostBuilder(
     IConventionScanner scanner,
     IAssemblyCandidateFinder assemblyCandidateFinder,
     IAssemblyProvider assemblyProvider,
     DiagnosticSource diagnosticSource,
     IServiceProviderDictionary serviceProperties
     ) : base(scanner, assemblyCandidateFinder, assemblyProvider, diagnosticSource, serviceProperties)
 {
 }
Beispiel #6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SerilogExtensionsConvention" /> class.
 /// </summary>
 /// <param name="scanner">The scanner.</param>
 /// <param name="diagnosticSource">The diagnostic source.</param>
 /// <param name="options">The options.</param>
 public SerilogExtensionsConvention(
     IConventionScanner scanner,
     ILogger diagnosticSource,
     RocketSerilogOptions?options = null
     )
 {
     _scanner          = scanner;
     _diagnosticSource = diagnosticSource;
     _options          = options ?? new RocketSerilogOptions();
 }
Beispiel #7
0
 /// <summary>
 /// Withes the specified scanner.
 /// </summary>
 /// <param name="scanner">The scanner.</param>
 /// <returns>RocketFunctionHostBuilder.</returns>
 internal RocketFunctionHostBuilder With(IConventionScanner scanner) => new RocketFunctionHostBuilder(
     Builder,
     FunctionsAssembly,
     _startupInstance,
     _environment,
     scanner,
     AssemblyCandidateFinder,
     AssemblyProvider,
     DiagnosticSource,
     ServiceProperties
     );
 /// <summary>
 /// Initializes a new instance of the <see cref="RocketHostBuilder" /> class.
 /// </summary>
 /// <param name="builder">The builder.</param>
 /// <param name="scanner">The scanner.</param>
 /// <param name="assemblyCandidateFinder">The assembly candidate finder.</param>
 /// <param name="assemblyProvider">The assembly provider.</param>
 /// <param name="diagnosticSource">The diagnostic source.</param>
 /// <param name="serviceProperties">The service properties.</param>
 public RocketHostBuilder(
     IHostBuilder builder,
     IConventionScanner scanner,
     IAssemblyCandidateFinder assemblyCandidateFinder,
     IAssemblyProvider assemblyProvider,
     DiagnosticSource diagnosticSource,
     IServiceProviderDictionary serviceProperties
     ) : base(scanner, assemblyCandidateFinder, assemblyProvider, diagnosticSource, serviceProperties)
 {
     Builder = builder;
     Logger  = new DiagnosticLogger(diagnosticSource);
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="ConventionContainerBuilder{TBuilder, TConvention, TDelegate}" /> class.
        /// </summary>
        /// <param name="scanner">The scanner.</param>
        /// <param name="properties">The properties.</param>
        /// <exception cref="ArgumentNullException">
        /// scanner
        /// or
        /// properties
        /// </exception>
        protected ConventionContainerBuilder(
            IConventionScanner scanner,
            IDictionary <object, object?> properties
            )
        {
            Scanner    = scanner ?? throw new ArgumentNullException(nameof(scanner));
            Properties = properties ?? throw new ArgumentNullException(nameof(properties));

            if (!Properties.TryGetValue(typeof(IConventionScanner), out var _))
            {
                Properties[typeof(IConventionScanner)] = Scanner;
            }
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="CommandLineBuilder" /> class.
 /// </summary>
 /// <param name="scanner">The scanner.</param>
 /// <param name="assemblyProvider">The assembly provider.</param>
 /// <param name="assemblyCandidateFinder">The assembly candidate finder.</param>
 /// <param name="diagnosticSource">The diagnostic source.</param>
 /// <param name="properties">The properties.</param>
 /// <exception cref="ArgumentNullException">diagnosticSource</exception>
 public CommandLineBuilder(
     IConventionScanner scanner,
     IAssemblyProvider assemblyProvider,
     IAssemblyCandidateFinder assemblyCandidateFinder,
     ILogger diagnosticSource,
     IDictionary <object, object?> properties
     ) : base(scanner, assemblyProvider, assemblyCandidateFinder, properties)
 {
     _application = new CommandLineApplication <ApplicationState>
     {
         UnrecognizedArgumentHandling = UnrecognizedArgumentHandling.CollectAndContinue
     };
     Logger = diagnosticSource ?? throw new ArgumentNullException(nameof(diagnosticSource));
 }
Beispiel #11
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ConfigurationBuilder" /> class.
 /// </summary>
 /// <param name="scanner">The scanner.</param>
 /// <param name="environment">The environment.</param>
 /// <param name="configuration">The configuration.</param>
 /// <param name="builder">The builder.</param>
 /// <param name="diagnosticSource">The diagnostic source.</param>
 /// <param name="properties">The properties.</param>
 /// <exception cref="ArgumentNullException">
 /// scanner
 /// or
 /// builder
 /// or
 /// configuration
 /// or
 /// diagnosticSource
 /// </exception>
 public ConfigurationBuilder(
     IConventionScanner scanner,
     IRocketEnvironment environment,
     IConfiguration configuration,
     IMsftConfigurationBuilder builder,
     ILogger diagnosticSource,
     IDictionary <object, object?> properties
     ) : base(scanner, properties)
 {
     ApplicationConfigurationBuilder = builder ?? throw new ArgumentNullException(nameof(builder));
     Environment   = environment;
     Configuration = configuration ?? throw new ArgumentNullException(nameof(configuration));
     Logger        = diagnosticSource ?? throw new ArgumentNullException(nameof(diagnosticSource));
 }
Beispiel #12
0
 /// <summary>
 /// Initializes a new instance of the <see cref="CommandLineBuilder" /> class.
 /// </summary>
 /// <param name="scanner">The scanner.</param>
 /// <param name="assemblyProvider">The assembly provider.</param>
 /// <param name="assemblyCandidateFinder">The assembly candidate finder.</param>
 /// <param name="diagnosticSource">The diagnostic source.</param>
 /// <param name="properties">The properties.</param>
 /// <exception cref="ArgumentNullException">diagnosticSource</exception>
 public CommandLineBuilder(
     IConventionScanner scanner,
     IAssemblyProvider assemblyProvider,
     IAssemblyCandidateFinder assemblyCandidateFinder,
     ILogger diagnosticSource,
     IDictionary <object, object?> properties
     ) : base(scanner, assemblyProvider, assemblyCandidateFinder, properties)
 {
     _application = new CommandLineApplication <ApplicationState>
     {
         ThrowOnUnexpectedArgument = false
     };
     Logger = diagnosticSource ?? throw new ArgumentNullException(nameof(diagnosticSource));
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="ConventionTestHost" /> class.
 /// </summary>
 /// <param name="scanner">The scanner.</param>
 /// <param name="assemblyCandidateFinder">The assembly candidate finder.</param>
 /// <param name="assemblyProvider">The assembly provider.</param>
 /// <param name="diagnosticSource">The diagnostic source.</param>
 /// <param name="serviceProperties">The service properties.</param>
 /// <param name="loggerFactory">The logger factory.</param>
 /// <param name="environment">The environment.</param>
 internal ConventionTestHost(
     IConventionScanner scanner,
     IAssemblyCandidateFinder assemblyCandidateFinder,
     IAssemblyProvider assemblyProvider,
     DiagnosticSource diagnosticSource,
     IServiceProviderDictionary serviceProperties,
     ILoggerFactory loggerFactory,
     IRocketEnvironment environment
     ) : base(scanner, assemblyCandidateFinder, assemblyProvider, diagnosticSource, serviceProperties)
 {
     serviceProperties.Set(HostType.UnitTestHost);
     _loggerFactory = loggerFactory;
     _environment   = environment;
     _logger        = ServiceProperties.Get <ILogger>();
 }
Beispiel #14
0
 /// <summary>
 /// Initializes a new instance of the <see cref="LoggingBuilder" /> class.
 /// </summary>
 /// <param name="scanner">The scanner.</param>
 /// <param name="assemblyProvider">The assembly provider.</param>
 /// <param name="assemblyCandidateFinder">The assembly candidate finder.</param>
 /// <param name="services">The services.</param>
 /// <param name="environment">The environment.</param>
 /// <param name="configuration">The configuration.</param>
 /// <param name="diagnosticSource">The diagnostic source.</param>
 /// <param name="properties">The properties.</param>
 /// <exception cref="ArgumentNullException">
 /// environment
 /// or
 /// services
 /// or
 /// configuration
 /// or
 /// diagnosticSource
 /// </exception>
 public LoggingBuilder(
     IConventionScanner scanner,
     IAssemblyProvider assemblyProvider,
     IAssemblyCandidateFinder assemblyCandidateFinder,
     IServiceCollection services,
     IRocketEnvironment environment,
     IConfiguration configuration,
     ILogger diagnosticSource,
     IDictionary <object, object?> properties
     ) : base(scanner, assemblyProvider, assemblyCandidateFinder, properties)
 {
     Environment   = environment ?? throw new ArgumentNullException(nameof(environment));
     Services      = services ?? throw new ArgumentNullException(nameof(services));
     Configuration = configuration ?? throw new ArgumentNullException(nameof(configuration));
     Logger        = diagnosticSource ?? throw new ArgumentNullException(nameof(diagnosticSource));
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="MetricsBuilder" /> class.
 /// </summary>
 /// <param name="scanner">The scanner.</param>
 /// <param name="assemblyProvider">The assembly provider.</param>
 /// <param name="assemblyCandidateFinder">The assembly candidate finder.</param>
 /// <param name="appMetricsBuilder">The metrics builder.</param>
 /// <param name="environment">The environment.</param>
 /// <param name="configuration">The configuration.</param>
 /// <param name="diagnosticSource">The diagnostic source.</param>
 /// <param name="properties">The properties.</param>
 /// <exception cref="ArgumentNullException">
 /// environment
 /// or
 /// metricsBuilder
 /// or
 /// configuration
 /// or
 /// diagnosticSource
 /// </exception>
 public MetricsBuilder(
     IConventionScanner scanner,
     IAssemblyProvider assemblyProvider,
     IAssemblyCandidateFinder assemblyCandidateFinder,
     IAppMetricsBuilder appMetricsBuilder,
     IRocketEnvironment environment,
     IConfiguration configuration,
     ILogger diagnosticSource,
     IDictionary <object, object?> properties
     ) : base(scanner, assemblyProvider, assemblyCandidateFinder, properties)
 {
     Environment       = environment ?? throw new ArgumentNullException(nameof(environment));
     AppMetricsBuilder = appMetricsBuilder ?? throw new ArgumentNullException(nameof(appMetricsBuilder));
     Configuration     = configuration ?? throw new ArgumentNullException(nameof(configuration));
     Logger            = diagnosticSource ?? throw new ArgumentNullException(nameof(diagnosticSource));
 }
        /// <summary>
        /// Uses the scanner.
        /// </summary>
        /// <param name="builder">The builder.</param>
        /// <param name="scanner">The scanner.</param>
        /// <returns>IRocketHostBuilder.</returns>
        public static IRocketHostBuilder UseScanner(
            [NotNull] this IRocketHostBuilder builder,
            [NotNull] IConventionScanner scanner
            )
        {
            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (scanner == null)
            {
                throw new ArgumentNullException(nameof(scanner));
            }

            return(Swap(builder, GetOrCreateBuilder(builder).With(scanner)));
        }
Beispiel #17
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RocketFunctionHostBuilder"/> class.
 /// </summary>
 /// <param name="builder">The builder.</param>
 /// <param name="functionsAssembly">The functions assembly.</param>
 /// <param name="startupInstance">The startup instance.</param>
 /// <param name="environment">The environment.</param>
 /// <param name="scanner">The scanner.</param>
 /// <param name="assemblyCandidateFinder">The assembly candidate finder.</param>
 /// <param name="assemblyProvider">The assembly provider.</param>
 /// <param name="diagnosticSource">The diagnostic source.</param>
 /// <param name="serviceProviderDictionary">The service provider dictionary of values</param>
 public RocketFunctionHostBuilder(
     IWebJobsBuilder builder,
     Assembly functionsAssembly,
     object startupInstance,
     IRocketEnvironment environment,
     IConventionScanner scanner,
     IAssemblyCandidateFinder assemblyCandidateFinder,
     IAssemblyProvider assemblyProvider,
     DiagnosticSource diagnosticSource,
     IServiceProviderDictionary serviceProviderDictionary) : base(scanner, assemblyCandidateFinder, assemblyProvider, diagnosticSource, serviceProviderDictionary)
 {
     _startupInstance  = startupInstance;
     _environment      = environment ?? CreateEnvironment();
     _logger           = new DiagnosticLogger(DiagnosticSource);
     Builder           = builder;
     FunctionsAssembly = functionsAssembly;
 }
Beispiel #18
0
        /// <summary>
        /// Executes the register.
        /// </summary>
        /// <param name="scanner">The scanner.</param>
        /// <param name="context">The context.</param>
        /// <param name="types">The types.</param>
        public static void Register(
            [NotNull] IConventionScanner scanner,
            [NotNull] IConventionContext context,
            IEnumerable <Type> types
            )
        {
            if (scanner == null)
            {
                throw new ArgumentNullException(nameof(scanner));
            }

            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            Register(context, scanner.BuildProvider().GetAll(context.GetHostType()), types);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="ConventionBuilder{TBuilder, TConvention, TDelegate}" /> class.
        /// </summary>
        /// <param name="scanner">The scanner.</param>
        /// <param name="assemblyProvider">The assembly provider.</param>
        /// <param name="assemblyCandidateFinder">The assembly candidate finder.</param>
        /// <param name="properties">The properties.</param>
        /// <exception cref="ArgumentNullException">
        /// assemblyProvider
        /// or
        /// assemblyCandidateFinder
        /// </exception>
        protected ConventionBuilder(
            IConventionScanner scanner,
            IAssemblyProvider assemblyProvider,
            IAssemblyCandidateFinder assemblyCandidateFinder,
            IDictionary <object, object?> properties
            ) : base(scanner, properties)
        {
            AssemblyProvider        = assemblyProvider ?? throw new ArgumentNullException(nameof(assemblyProvider));
            AssemblyCandidateFinder = assemblyCandidateFinder ??
                                      throw new ArgumentNullException(nameof(assemblyCandidateFinder));

            if (!Properties.TryGetValue(typeof(IAssemblyProvider), out var _))
            {
                Properties[typeof(IAssemblyProvider)] = AssemblyProvider;
            }

            if (!Properties.TryGetValue(typeof(IAssemblyCandidateFinder), out var _))
            {
                Properties[typeof(IAssemblyCandidateFinder)] = AssemblyCandidateFinder;
            }
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="ConventionHostBuilder{TSelf}" /> class.
        /// </summary>
        /// <param name="scanner">The scanner.</param>
        /// <param name="assemblyCandidateFinder">The assembly candidate finder.</param>
        /// <param name="assemblyProvider">The assembly provider.</param>
        /// <param name="diagnosticSource">The diagnostic source.</param>
        /// <param name="serviceProperties">The properties.</param>
        protected ConventionHostBuilder(
            IConventionScanner scanner,
            IAssemblyCandidateFinder assemblyCandidateFinder,
            IAssemblyProvider assemblyProvider,
            DiagnosticSource diagnosticSource,
            IServiceProviderDictionary serviceProperties
            )
        {
            Scanner = scanner;
            AssemblyCandidateFinder = assemblyCandidateFinder;
            AssemblyProvider        = assemblyProvider;
            DiagnosticSource        = diagnosticSource;
            ServiceProperties       = serviceProperties ?? new ServiceProviderDictionary();

            if (!Properties.TryGetValue(typeof(IConventionScanner), out var _))
            {
                Properties[typeof(IConventionScanner)] = scanner;
            }

            if (!Properties.TryGetValue(typeof(IAssemblyProvider), out var _))
            {
                Properties[typeof(IAssemblyProvider)] = assemblyProvider;
            }

            if (!Properties.TryGetValue(typeof(IAssemblyCandidateFinder), out var _))
            {
                Properties[typeof(IAssemblyCandidateFinder)] = assemblyCandidateFinder;
            }

            if (!Properties.TryGetValue(typeof(DiagnosticSource), out var _))
            {
                Properties[typeof(DiagnosticSource)] = diagnosticSource;
            }

            if (!Properties.TryGetValue(typeof(ILogger), out var _))
            {
                Properties[typeof(ILogger)] = new DiagnosticLogger(diagnosticSource);
            }
        }
Beispiel #21
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ServicesBuilder" /> class.
 /// </summary>
 /// <param name="scanner">The scanner.</param>
 /// <param name="assemblyProvider">The assembly provider.</param>
 /// <param name="assemblyCandidateFinder">The assembly candidate finder.</param>
 /// <param name="services">The services.</param>
 /// <param name="configuration">The configuration.</param>
 /// <param name="environment">The environment.</param>
 /// <param name="diagnosticSource">The diagnostic source.</param>
 /// <param name="properties">The properties.</param>
 /// <exception cref="ArgumentNullException">
 /// environment
 /// or
 /// diagnosticSource
 /// or
 /// configuration
 /// or
 /// services
 /// </exception>
 public ServicesBuilder(
     IConventionScanner scanner,
     IAssemblyProvider assemblyProvider,
     IAssemblyCandidateFinder assemblyCandidateFinder,
     IServiceCollection services,
     IConfiguration configuration,
     IRocketEnvironment environment,
     ILogger diagnosticSource,
     IDictionary <object, object?> properties
     )
     : base(scanner, assemblyProvider, assemblyCandidateFinder, properties)
 {
     Environment            = environment ?? throw new ArgumentNullException(nameof(environment));
     Configuration          = configuration ?? throw new ArgumentNullException(nameof(configuration));
     Services               = services ?? throw new ArgumentNullException(nameof(services));
     Logger                 = diagnosticSource ?? throw new ArgumentNullException(nameof(diagnosticSource));
     _onBuild               = new ServiceProviderObservable(Logger);
     ServiceProviderOptions = new ServiceProviderOptions
     {
         ValidateScopes = environment.IsDevelopment()
     };
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="AutofacBuilder" /> class.
        /// </summary>
        /// <param name="environment">The environment.</param>
        /// <param name="configuration">The configuration.</param>
        /// <param name="scanner">The scanner.</param>
        /// <param name="assemblyProvider">The assembly provider.</param>
        /// <param name="assemblyCandidateFinder">The assembly candidate finder.</param>
        /// <param name="services">The services.</param>
        /// <param name="containerBuilder">The container builder.</param>
        /// <param name="diagnosticSource">The diagnostic source</param>
        /// <param name="properties">The properties</param>
        /// <exception cref="ArgumentNullException">
        /// environment
        /// or
        /// containerBuilder
        /// or
        /// configuration
        /// or
        /// services
        /// </exception>
        public AutofacBuilder(
            IRocketEnvironment environment,
            IConfiguration configuration,
            IConventionScanner scanner,
            IAssemblyProvider assemblyProvider,
            IAssemblyCandidateFinder assemblyCandidateFinder,
            IServiceCollection services,
            ContainerBuilder containerBuilder,
            ILogger diagnosticSource,
            IDictionary <object, object?> properties
            )
            : base(scanner, assemblyProvider, assemblyCandidateFinder, properties)
        {
            Environment       = environment ?? throw new ArgumentNullException(nameof(environment));
            _containerBuilder = containerBuilder ?? throw new ArgumentNullException(nameof(containerBuilder));
            Configuration     = configuration ?? throw new ArgumentNullException(nameof(configuration));
            Services          = services ?? throw new ArgumentNullException(nameof(services));
            Logger            = diagnosticSource ?? throw new ArgumentNullException(nameof(diagnosticSource));

            _containerObservable    = new GenericObservableObservable <IContainer>(Logger);
            _serviceProviderOnBuild = new GenericObservableObservable <IServiceProvider>(Logger);
        }
Beispiel #23
0
        /// <summary>
        /// Executes the register.
        /// </summary>
        /// <param name="scanner">The provider.</param>
        /// <param name="context">The context.</param>
        public static void Register <TContext, TContribution, TDelegate>(
            [NotNull] IConventionScanner scanner,
            [NotNull] IConventionContext context
            )
            where TContext : IConventionContext
            where TContribution : IConvention <TContext>
            where TDelegate : Delegate
        {
            if (scanner == null)
            {
                throw new ArgumentNullException(nameof(scanner));
            }

            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            Register(
                context,
                scanner.BuildProvider().Get <TContribution, TDelegate>(context.GetHostType()),
                new[] { typeof(TContribution), typeof(TDelegate) }
                );
        }
Beispiel #24
0
 public static void WithSmartConventions(this IConventionScanner scanner)
 {
     scanner.WithSmartConventions(false);
 }
 public static void WithSmartConventions(this IConventionScanner scanner)
 {
     scanner.PrimaryKeysNamed(y => y.Name + "Id");
     scanner.TablesNamed(y => Inflector.MakePlural(y.Name));
     scanner.Columns.IgnoreComplex();
 }
 /// <summary>
 /// Uses the scanner.
 /// </summary>
 /// <param name="builder">The builder.</param>
 /// <param name="scanner">The scanner.</param>
 /// <returns>IRocketHostBuilder.</returns>
 public static IRocketHostBuilder UseScanner(this IRocketHostBuilder builder, IConventionScanner scanner)
 {
     return(Swap(builder, GetOrCreateBuilder(builder).With(scanner)));
 }
Beispiel #27
0
 /// <summary>
 /// Initializes a new instance of the <see cref="AspNetCoreMetricsConvention"/> class.
 /// </summary>
 /// <param name="scanner">The scanner.</param>
 /// <param name="diagnosticSource">The diagnostic source logger.</param>
 /// <param name="options">The options.</param>
 public AspNetCoreMetricsConvention(IConventionScanner scanner, ILogger diagnosticSource, RocketMetricsOptions?options = null)
 {
     _scanner          = scanner;
     _diagnosticSource = diagnosticSource;
     _options          = options ?? new RocketMetricsOptions();
 }
 /// <summary>
 /// A base compose that does the composing of conventions and delegates
 /// </summary>
 /// <param name="scanner"></param>
 protected ConventionComposer(IConventionScanner scanner)
 => _scanner = scanner ?? throw new ArgumentNullException(nameof(scanner));
 public ConventionComposer(IConventionScanner scanner) => _scanner = scanner;
Beispiel #30
0
 public CCBuilder(IConventionScanner scanner, IServiceProviderDictionary properties) : base(
         scanner,
         properties
         )
 {
 }