/// <summary> /// Registers default implementations of all services not already registered by the provider. /// Database providers must call this method as the last step of service registration--that is, /// after all provider services have been registered. /// </summary> /// <returns> This builder, such that further calls can be chained. </returns> public virtual EntityFrameworkServicesBuilder TryAddCoreServices() { TryAdd <IDbSetFinder, DbSetFinder>(); TryAdd <IDbSetInitializer, DbSetInitializer>(); TryAdd <IDbSetSource, DbSetSource>(); TryAdd <IEntityFinderSource, EntityFinderSource>(); TryAdd <IEntityMaterializerSource, EntityMaterializerSource>(); TryAdd <IProviderConventionSetBuilder, ProviderConventionSetBuilder>(); TryAdd <IConventionSetBuilder, RuntimeConventionSetBuilder>(); TryAdd <IModelCustomizer, ModelCustomizer>(); TryAdd <IModelCacheKeyFactory, ModelCacheKeyFactory>(); TryAdd <ILoggerFactory>(p => ScopedLoggerFactory.Create(p, null)); TryAdd <IModelSource, ModelSource>(); TryAdd <IInternalEntityEntryFactory, InternalEntityEntryFactory>(); TryAdd <IInternalEntityEntrySubscriber, InternalEntityEntrySubscriber>(); TryAdd <IEntityEntryGraphIterator, EntityEntryGraphIterator>(); TryAdd <IEntityGraphAttacher, EntityGraphAttacher>(); TryAdd <IValueGeneratorCache, ValueGeneratorCache>(); TryAdd <IKeyPropagator, KeyPropagator>(); TryAdd <INavigationFixer, NavigationFixer>(); TryAdd <ILocalViewListener, LocalViewListener>(); TryAdd <IStateManager, StateManager>(); TryAdd <IConcurrencyDetector, ConcurrencyDetector>(); TryAdd <IInternalEntityEntryNotifier, InternalEntityEntryNotifier>(); TryAdd <IValueGenerationManager, ValueGenerationManager>(); TryAdd <IChangeTrackerFactory, ChangeTrackerFactory>(); TryAdd <IChangeDetector, ChangeDetector>(); TryAdd <IDbContextServices, DbContextServices>(); TryAdd <IDbContextDependencies, DbContextDependencies>(); TryAdd <IValueGeneratorSelector, ValueGeneratorSelector>(); TryAdd <IModelValidator, ModelValidator>(); TryAdd <IExecutionStrategyFactory, ExecutionStrategyFactory>(); TryAdd <ICompiledQueryCache, CompiledQueryCache>(); TryAdd <IAsyncQueryProvider, EntityQueryProvider>(); TryAdd <IQueryCompiler, QueryCompiler>(); TryAdd <ICompiledQueryCacheKeyGenerator, CompiledQueryCacheKeyGenerator>(); TryAdd <ISingletonOptionsInitializer, SingletonOptionsInitializer>(); TryAdd(typeof(IDiagnosticsLogger <>), typeof(DiagnosticsLogger <>)); TryAdd <IInterceptors, Interceptors>(); TryAdd <ILoggingOptions, LoggingOptions>(); TryAdd <ICoreSingletonOptions, CoreSingletonOptions>(); TryAdd <ISingletonOptions, ILoggingOptions>(p => p.GetService <ILoggingOptions>()); TryAdd <ISingletonOptions, ICoreSingletonOptions>(p => p.GetService <ICoreSingletonOptions>()); TryAdd(p => GetContextServices(p).Model); TryAdd(p => GetContextServices(p).CurrentContext); TryAdd(p => GetContextServices(p).ContextOptions); TryAdd <IResettableService, IStateManager>(p => p.GetService <IStateManager>()); TryAdd <IResettableService, IDbContextTransactionManager>(p => p.GetService <IDbContextTransactionManager>()); TryAdd <IEvaluatableExpressionFilter, EvaluatableExpressionFilter>(); TryAdd <IValueConverterSelector, ValueConverterSelector>(); TryAdd <IConstructorBindingFactory, ConstructorBindingFactory>(); TryAdd <ILazyLoader, LazyLoader>(); TryAdd <IParameterBindingFactories, ParameterBindingFactories>(); TryAdd <IMemberClassifier, MemberClassifier>(); TryAdd <IPropertyParameterBindingFactory, PropertyParameterBindingFactory>(); TryAdd <IParameterBindingFactory, LazyLoaderParameterBindingFactory>(); TryAdd <IParameterBindingFactory, ContextParameterBindingFactory>(); TryAdd <IParameterBindingFactory, EntityTypeParameterBindingFactory>(); TryAdd <IMemoryCache>(p => new MemoryCache(new MemoryCacheOptions())); TryAdd <IUpdateAdapterFactory, UpdateAdapterFactory>(); // New QueryPipeline TryAdd <IQueryCompilationContextFactory, QueryCompilationContextFactory>(); TryAdd <IQueryOptimizerFactory, QueryOptimizerFactory>(); TryAdd <IShapedQueryOptimizerFactory, ShapedQueryOptimizerFactory>(); // This has to be lazy to avoid creating instances that are not disposed ServiceCollectionMap .TryAddSingleton <DiagnosticSource>(p => new DiagnosticListener(DbLoggerCategory.Name)); ServiceCollectionMap.GetInfrastructure() .AddDependencySingleton <LazyLoaderParameterBindingFactoryDependencies>() .AddDependencySingleton <DatabaseProviderDependencies>() .AddDependencySingleton <ModelSourceDependencies>() .AddDependencySingleton <ValueGeneratorCacheDependencies>() .AddDependencySingleton <ModelValidatorDependencies>() .AddDependencySingleton <TypeMappingSourceDependencies>() .AddDependencySingleton <ModelCustomizerDependencies>() .AddDependencySingleton <ModelCacheKeyFactoryDependencies>() .AddDependencySingleton <ValueConverterSelectorDependencies>() .AddDependencyScoped <ProviderConventionSetBuilderDependencies>() .AddDependencyScoped <StateManagerDependencies>() .AddDependencyScoped <ExecutionStrategyDependencies>() .AddDependencyScoped <CompiledQueryCacheKeyGeneratorDependencies>() .AddDependencyScoped <QueryContextDependencies>() .AddDependencyScoped <ValueGeneratorSelectorDependencies>() .AddDependencyScoped <DatabaseDependencies>() .AddDependencyScoped <InterceptorsDependencies>(); ServiceCollectionMap.TryAddSingleton <IRegisteredServices>( new RegisteredServices(ServiceCollectionMap.ServiceCollection.Select(s => s.ServiceType))); return(this); }
/// <summary> /// Registers default implementations of all services not already registered by the provider. /// Database providers must call this method as the last step of service registration--that is, /// after all provider services have been registered. /// </summary> /// <returns> This builder, such that further calls can be chained. </returns> public virtual EntityFrameworkServicesBuilder TryAddCoreServices() { TryAdd <IDbSetFinder, DbSetFinder>(); TryAdd <IDbSetInitializer, DbSetInitializer>(); TryAdd <IDbSetSource, DbSetSource>(); TryAdd <IEntityFinderSource, EntityFinderSource>(); TryAdd <IEntityMaterializerSource, EntityMaterializerSource>(); TryAdd <ICoreConventionSetBuilder, CoreConventionSetBuilder>(); TryAdd <IModelCustomizer, ModelCustomizer>(); TryAdd <IModelCacheKeyFactory, ModelCacheKeyFactory>(); TryAdd <ILoggerFactory>(p => ScopedLoggerFactory.Create(p, null)); TryAdd <IModelSource, ModelSource>(); TryAdd <IInternalEntityEntryFactory, InternalEntityEntryFactory>(); TryAdd <IInternalEntityEntrySubscriber, InternalEntityEntrySubscriber>(); TryAdd <IEntityEntryGraphIterator, EntityEntryGraphIterator>(); TryAdd <IEntityGraphAttacher, EntityGraphAttacher>(); TryAdd <IValueGeneratorCache, ValueGeneratorCache>(); TryAdd <INodeTypeProviderFactory, DefaultMethodInfoBasedNodeTypeRegistryFactory>(); TryAdd <IKeyPropagator, KeyPropagator>(); TryAdd <INavigationFixer, NavigationFixer>(); TryAdd <ILocalViewListener, LocalViewListener>(); TryAdd <IStateManager, StateManager>(); TryAdd <IConcurrencyDetector, ConcurrencyDetector>(); TryAdd <IInternalEntityEntryNotifier, InternalEntityEntryNotifier>(); TryAdd <IValueGenerationManager, ValueGenerationManager>(); TryAdd <IChangeTrackerFactory, ChangeTrackerFactory>(); TryAdd <IChangeDetector, ChangeDetector>(); TryAdd <IDbContextServices, DbContextServices>(); TryAdd <IDbContextDependencies, DbContextDependencies>(); TryAdd <IValueGeneratorSelector, ValueGeneratorSelector>(); TryAdd <IConventionSetBuilder, NullConventionSetBuilder>(); TryAdd <IModelValidator, ModelValidator>(); TryAdd <IExecutionStrategyFactory, ExecutionStrategyFactory>(); TryAdd <ICompiledQueryCache, CompiledQueryCache>(); TryAdd <IAsyncQueryProvider, EntityQueryProvider>(); TryAdd <IQueryCompiler, QueryCompiler>(); TryAdd <IQueryModelGenerator, QueryModelGenerator>(); TryAdd <IQueryAnnotationExtractor, QueryAnnotationExtractor>(); TryAdd <IQueryOptimizer, QueryOptimizer>(); TryAdd <IEntityTrackingInfoFactory, EntityTrackingInfoFactory>(); TryAdd <ITaskBlockingExpressionVisitor, TaskBlockingExpressionVisitor>(); TryAdd <IEntityResultFindingExpressionVisitorFactory, EntityResultFindingExpressionVisitorFactory>(); TryAdd <IMemberAccessBindingExpressionVisitorFactory, MemberAccessBindingExpressionVisitorFactory>(); TryAdd <INavigationRewritingExpressionVisitorFactory, NavigationRewritingExpressionVisitorFactory>(); TryAdd <IEagerLoadingExpressionVisitorFactory, EagerLoadingExpressionVisitorFactory>(); TryAdd <IQuerySourceTracingExpressionVisitorFactory, QuerySourceTracingExpressionVisitorFactory>(); TryAdd <IRequiresMaterializationExpressionVisitorFactory, RequiresMaterializationExpressionVisitorFactory>(); TryAdd <IExpressionPrinter, ExpressionPrinter>(); TryAdd <IQueryCompilationContextFactory, QueryCompilationContextFactory>(); TryAdd <ICompiledQueryCacheKeyGenerator, CompiledQueryCacheKeyGenerator>(); TryAdd <IResultOperatorHandler, ResultOperatorHandler>(); TryAdd <IProjectionExpressionVisitorFactory, ProjectionExpressionVisitorFactory>(); TryAdd <ISingletonOptionsInitializer, SingletonOptionsInitializer>(); TryAdd(typeof(IDiagnosticsLogger <>), typeof(DiagnosticsLogger <>)); TryAdd <ILoggingOptions, LoggingOptions>(); TryAdd <ICoreSingletonOptions, CoreSingletonOptions>(); TryAdd <ISingletonOptions, ILoggingOptions>(p => p.GetService <ILoggingOptions>()); TryAdd <ISingletonOptions, ICoreSingletonOptions>(p => p.GetService <ICoreSingletonOptions>()); TryAdd(p => GetContextServices(p).Model); TryAdd(p => GetContextServices(p).CurrentContext); TryAdd(p => GetContextServices(p).ContextOptions); TryAdd <IEntityStateListener, INavigationFixer>(p => p.GetService <INavigationFixer>()); TryAdd <INavigationListener, INavigationFixer>(p => p.GetService <INavigationFixer>()); TryAdd <IKeyListener, INavigationFixer>(p => p.GetService <INavigationFixer>()); TryAdd <IQueryTrackingListener, INavigationFixer>(p => p.GetService <INavigationFixer>()); TryAdd <IPropertyListener, IChangeDetector>(p => p.GetService <IChangeDetector>()); TryAdd <IEntityStateListener, ILocalViewListener>(p => p.GetService <ILocalViewListener>()); TryAdd <IResettableService, IStateManager>(p => p.GetService <IStateManager>()); TryAdd <IResettableService, IDbContextTransactionManager>(p => p.GetService <IDbContextTransactionManager>()); TryAdd <Func <IStateManager> >(p => p.GetService <IStateManager>); TryAdd <ReLinq.IEvaluatableExpressionFilter, ReLinqEvaluatableExpressionFilter>(); TryAdd <IEvaluatableExpressionFilter, EvaluatableExpressionFilter>(); TryAdd <IValueConverterSelector, ValueConverterSelector>(); TryAdd <IConstructorBindingFactory, ConstructorBindingFactory>(); TryAdd <ILazyLoader, LazyLoader>(); TryAdd <IParameterBindingFactories, ParameterBindingFactories>(); TryAdd <IMemberClassifier, MemberClassifier>(); TryAdd <IPropertyParameterBindingFactory, PropertyParameterBindingFactory>(); TryAdd <IParameterBindingFactory, LazyLoaderParameterBindingFactory>(); TryAdd <IParameterBindingFactory, ContextParameterBindingFactory>(); TryAdd <IParameterBindingFactory, EntityTypeParameterBindingFactory>(); TryAdd <IMemoryCache>(p => new MemoryCache(new MemoryCacheOptions())); ServiceCollectionMap .TryAddSingleton <DiagnosticSource>(new DiagnosticListener(DbLoggerCategory.Name)); ServiceCollectionMap.GetInfrastructure() .AddDependencySingleton <DatabaseProviderDependencies>() .AddDependencySingleton <ResultOperatorHandlerDependencies>() .AddDependencySingleton <ModelSourceDependencies>() .AddDependencySingleton <ValueGeneratorCacheDependencies>() .AddDependencySingleton <ModelValidatorDependencies>() .AddDependencySingleton <CoreConventionSetBuilderDependencies>() .AddDependencySingleton <TypeMappingSourceDependencies>() .AddDependencySingleton <ModelCustomizerDependencies>() .AddDependencySingleton <ModelCacheKeyFactoryDependencies>() .AddDependencySingleton <ValueConverterSelectorDependencies>() .AddDependencyScoped <StateManagerDependencies>() .AddDependencyScoped <ExecutionStrategyDependencies>() .AddDependencyScoped <CompiledQueryCacheKeyGeneratorDependencies>() .AddDependencyScoped <QueryContextDependencies>() .AddDependencyScoped <ValueGeneratorSelectorDependencies>() .AddDependencyScoped <EntityQueryModelVisitorDependencies>() .AddDependencyScoped <DatabaseDependencies>() .AddDependencyScoped <QueryCompilationContextDependencies>(); ServiceCollectionMap.TryAddSingleton <IRegisteredServices>( new RegisteredServices(ServiceCollectionMap.ServiceCollection.Select(s => s.ServiceType))); return(this); }