/// <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);
        }
Пример #2
0
        /// <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);
        }