diff --git a/src/EFCore/ChangeTracking/Internal/StateManagerDependencies.cs b/src/EFCore/ChangeTracking/Internal/StateManagerDependencies.cs
index b8d58d85fac..fd40b2dd0d7 100644
--- a/src/EFCore/ChangeTracking/Internal/StateManagerDependencies.cs
+++ b/src/EFCore/ChangeTracking/Internal/StateManagerDependencies.cs
@@ -293,7 +293,7 @@ public StateManagerDependencies With([NotNull] IInternalEntityEntryNotifier inte
///
/// A replacement for the current dependency of this type.
/// A new parameter object with the given service replaced.
- public StateManagerDependencies With([NotNull] ValueGenerationManager valueGenerationManager)
+ public StateManagerDependencies With([NotNull] IValueGenerationManager valueGenerationManager)
=> new StateManagerDependencies(
InternalEntityEntryFactory,
InternalEntityEntrySubscriber,
diff --git a/test/EFCore.Cosmos.Tests/CosmosApiConsistencyTest.cs b/test/EFCore.Cosmos.Tests/CosmosApiConsistencyTest.cs
index b6092eb2579..1c51ad333f8 100644
--- a/test/EFCore.Cosmos.Tests/CosmosApiConsistencyTest.cs
+++ b/test/EFCore.Cosmos.Tests/CosmosApiConsistencyTest.cs
@@ -5,6 +5,7 @@
using System.Collections.Generic;
using System.Reflection;
using Microsoft.EntityFrameworkCore.Cosmos.Storage.Internal;
+using Microsoft.EntityFrameworkCore.Cosmos.TestUtilities;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.Extensions.DependencyInjection;
@@ -19,14 +20,19 @@ public CosmosApiConsistencyTest(CosmosApiConsistencyFixture fixture)
}
protected override void AddServices(ServiceCollection serviceCollection)
- {
- serviceCollection.AddEntityFrameworkCosmos();
- }
+ => serviceCollection.AddEntityFrameworkCosmos();
protected override Assembly TargetAssembly => typeof(CosmosDatabaseWrapper).Assembly;
public class CosmosApiConsistencyFixture : ApiConsistencyFixtureBase
{
+ public override bool TryGetProviderOptionsDelegate(out Action configureOptions)
+ {
+ configureOptions = b => CosmosTestHelpers.Instance.UseProviderOptions(b);
+
+ return true;
+ }
+
public override HashSet FluentApiTypes { get; } = new HashSet
{
typeof(CosmosModelBuilderExtensions),
diff --git a/test/EFCore.Cosmos.Tests/TestUtilities/CosmosTestHelpers.cs b/test/EFCore.Cosmos.Tests/TestUtilities/CosmosTestHelpers.cs
index 336ef9d3bd3..32e465120f4 100644
--- a/test/EFCore.Cosmos.Tests/TestUtilities/CosmosTestHelpers.cs
+++ b/test/EFCore.Cosmos.Tests/TestUtilities/CosmosTestHelpers.cs
@@ -17,7 +17,7 @@ protected CosmosTestHelpers()
public override IServiceCollection AddProviderServices(IServiceCollection services)
=> services.AddEntityFrameworkCosmos();
- protected override void UseProviderOptions(DbContextOptionsBuilder optionsBuilder)
+ public override void UseProviderOptions(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseCosmos(
TestEnvironment.DefaultConnection,
TestEnvironment.AuthToken,
diff --git a/test/EFCore.Design.Tests/DesignApiConsistencyTest.cs b/test/EFCore.Design.Tests/DesignApiConsistencyTest.cs
index 9bad045f4d0..b7b2994a8fd 100644
--- a/test/EFCore.Design.Tests/DesignApiConsistencyTest.cs
+++ b/test/EFCore.Design.Tests/DesignApiConsistencyTest.cs
@@ -5,6 +5,7 @@
using System.Collections.Generic;
using System.Reflection;
using Microsoft.EntityFrameworkCore.Design;
+using Microsoft.EntityFrameworkCore.TestUtilities;
using Microsoft.Extensions.DependencyInjection;
namespace Microsoft.EntityFrameworkCore
@@ -24,6 +25,13 @@ protected override void AddServices(ServiceCollection serviceCollection)
public class DesignApiConsistencyFixture : ApiConsistencyFixtureBase
{
+ public override bool TryGetProviderOptionsDelegate(out Action configureOptions)
+ {
+ configureOptions = b => InMemoryTestHelpers.Instance.UseProviderOptions(b);
+
+ return true;
+ }
+
public override HashSet FluentApiTypes { get; } = new HashSet()
{
typeof(DesignTimeServiceCollectionExtensions)
diff --git a/test/EFCore.InMemory.FunctionalTests/TestUtilities/InMemoryTestHelpers.cs b/test/EFCore.InMemory.FunctionalTests/TestUtilities/InMemoryTestHelpers.cs
index e322a4d9838..f8e680959e4 100644
--- a/test/EFCore.InMemory.FunctionalTests/TestUtilities/InMemoryTestHelpers.cs
+++ b/test/EFCore.InMemory.FunctionalTests/TestUtilities/InMemoryTestHelpers.cs
@@ -18,7 +18,7 @@ protected InMemoryTestHelpers()
public override IServiceCollection AddProviderServices(IServiceCollection services)
=> services.AddEntityFrameworkInMemoryDatabase();
- protected override void UseProviderOptions(DbContextOptionsBuilder optionsBuilder)
+ public override void UseProviderOptions(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseInMemoryDatabase(nameof(InMemoryTestHelpers));
public override LoggingDefinitions LoggingDefinitions { get; } = new InMemoryLoggingDefinitions();
diff --git a/test/EFCore.InMemory.Tests/InMemoryApiConsistencyTest.cs b/test/EFCore.InMemory.Tests/InMemoryApiConsistencyTest.cs
index 0b2a0039f71..8b91c904255 100644
--- a/test/EFCore.InMemory.Tests/InMemoryApiConsistencyTest.cs
+++ b/test/EFCore.InMemory.Tests/InMemoryApiConsistencyTest.cs
@@ -6,6 +6,7 @@
using System.Reflection;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.InMemory.Storage.Internal;
+using Microsoft.EntityFrameworkCore.TestUtilities;
using Microsoft.Extensions.DependencyInjection;
namespace Microsoft.EntityFrameworkCore
@@ -18,14 +19,19 @@ public InMemoryApiConsistencyTest(InMemoryApiConsistencyFixture fixture)
}
protected override void AddServices(ServiceCollection serviceCollection)
- {
- serviceCollection.AddEntityFrameworkInMemoryDatabase();
- }
+ => serviceCollection.AddEntityFrameworkInMemoryDatabase();
protected override Assembly TargetAssembly => typeof(InMemoryDatabase).Assembly;
public class InMemoryApiConsistencyFixture : ApiConsistencyFixtureBase
{
+ public override bool TryGetProviderOptionsDelegate(out Action configureOptions)
+ {
+ configureOptions = b => InMemoryTestHelpers.Instance.UseProviderOptions(b);
+
+ return true;
+ }
+
public override HashSet FluentApiTypes { get; } = new HashSet()
{
typeof(InMemoryServiceCollectionExtensions),
diff --git a/test/EFCore.Proxies.Tests/ProxiesApiConsistencyTest.cs b/test/EFCore.Proxies.Tests/ProxiesApiConsistencyTest.cs
index eb633169900..931c34ddbf3 100644
--- a/test/EFCore.Proxies.Tests/ProxiesApiConsistencyTest.cs
+++ b/test/EFCore.Proxies.Tests/ProxiesApiConsistencyTest.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using System.Reflection;
+using Microsoft.EntityFrameworkCore.TestUtilities;
using Microsoft.Extensions.DependencyInjection;
namespace Microsoft.EntityFrameworkCore
@@ -16,14 +17,19 @@ public ProxiesApiConsistencyTest(ProxiesApiConsistencyFixture fixture)
}
protected override void AddServices(ServiceCollection serviceCollection)
- {
- serviceCollection.AddEntityFrameworkProxies();
- }
+ => serviceCollection.AddEntityFrameworkProxies();
protected override Assembly TargetAssembly => typeof(ProxiesExtensions).Assembly;
public class ProxiesApiConsistencyFixture : ApiConsistencyFixtureBase
{
+ public override bool TryGetProviderOptionsDelegate(out Action configureOptions)
+ {
+ configureOptions = b => InMemoryTestHelpers.Instance.UseProviderOptions(b);
+
+ return true;
+ }
+
public override HashSet FluentApiTypes { get; } = new HashSet()
{
typeof(ProxiesServiceCollectionExtensions)
diff --git a/test/EFCore.Relational.Tests/EFCore.Relational.Tests.csproj b/test/EFCore.Relational.Tests/EFCore.Relational.Tests.csproj
index 21e8f9f434e..69bd330eaa3 100644
--- a/test/EFCore.Relational.Tests/EFCore.Relational.Tests.csproj
+++ b/test/EFCore.Relational.Tests/EFCore.Relational.Tests.csproj
@@ -27,4 +27,8 @@
+
+
+
+
diff --git a/test/EFCore.Relational.Tests/Infrastructure/RelationalModelValidatorDependenciesTest.cs b/test/EFCore.Relational.Tests/Infrastructure/RelationalModelValidatorDependenciesTest.cs
deleted file mode 100644
index ed4aa864c91..00000000000
--- a/test/EFCore.Relational.Tests/Infrastructure/RelationalModelValidatorDependenciesTest.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-// ReSharper disable InconsistentNaming
-namespace Microsoft.EntityFrameworkCore.Infrastructure
-{
- public class RelationalModelValidatorDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- RelationalTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Relational.Tests/Metadata/Conventions/Internal/RelationalConventionSetBuilderDependenciesTest.cs b/test/EFCore.Relational.Tests/Metadata/Conventions/Internal/RelationalConventionSetBuilderDependenciesTest.cs
deleted file mode 100644
index 62eaf5c2340..00000000000
--- a/test/EFCore.Relational.Tests/Metadata/Conventions/Internal/RelationalConventionSetBuilderDependenciesTest.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.Metadata.Conventions.Infrastructure;
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-// ReSharper disable InconsistentNaming
-namespace Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal
-{
- public class RelationalConventionSetBuilderDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- RelationalTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Relational.Tests/Migrations/HistoryRepositoryDependenciesTest.cs b/test/EFCore.Relational.Tests/Migrations/HistoryRepositoryDependenciesTest.cs
deleted file mode 100644
index 664a38316c4..00000000000
--- a/test/EFCore.Relational.Tests/Migrations/HistoryRepositoryDependenciesTest.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-// ReSharper disable InconsistentNaming
-namespace Microsoft.EntityFrameworkCore.Migrations
-{
- public class HistoryRepositoryDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- RelationalTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Relational.Tests/Migrations/MigrationsAnnotationProviderDependenciesTest.cs b/test/EFCore.Relational.Tests/Migrations/MigrationsAnnotationProviderDependenciesTest.cs
deleted file mode 100644
index 07ff1c06804..00000000000
--- a/test/EFCore.Relational.Tests/Migrations/MigrationsAnnotationProviderDependenciesTest.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.Metadata;
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Migrations
-{
- public class MigrationsAnnotationProviderDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- RelationalTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Relational.Tests/Migrations/MigrationsSqlGeneratorDependenciesTest.cs b/test/EFCore.Relational.Tests/Migrations/MigrationsSqlGeneratorDependenciesTest.cs
deleted file mode 100644
index e638acc54e5..00000000000
--- a/test/EFCore.Relational.Tests/Migrations/MigrationsSqlGeneratorDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Migrations
-{
- public class MigrationsSqlGeneratorDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- RelationalTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Relational.Tests/ModificationCommandBatchFactoryDependenciesTest.cs b/test/EFCore.Relational.Tests/ModificationCommandBatchFactoryDependenciesTest.cs
deleted file mode 100644
index 54837bef921..00000000000
--- a/test/EFCore.Relational.Tests/ModificationCommandBatchFactoryDependenciesTest.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Microsoft.EntityFrameworkCore.Update;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore
-{
- public class ModificationCommandBatchFactoryDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- RelationalTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Relational.Tests/Query/QuerySqlGeneratorDependenciesTest.cs b/test/EFCore.Relational.Tests/Query/QuerySqlGeneratorDependenciesTest.cs
deleted file mode 100644
index 9ad38a0db1c..00000000000
--- a/test/EFCore.Relational.Tests/Query/QuerySqlGeneratorDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Query
-{
- public class QuerySqlGeneratorDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- RelationalTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Relational.Tests/Query/RelationalEvaluatableExpressionFilterDependenciesTest.cs b/test/EFCore.Relational.Tests/Query/RelationalEvaluatableExpressionFilterDependenciesTest.cs
deleted file mode 100644
index bcf295391ad..00000000000
--- a/test/EFCore.Relational.Tests/Query/RelationalEvaluatableExpressionFilterDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Query
-{
- public class RelationalEvaluatableExpressionFilterDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- RelationalTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Relational.Tests/Query/RelationalQueryContextDependenciesTest.cs b/test/EFCore.Relational.Tests/Query/RelationalQueryContextDependenciesTest.cs
deleted file mode 100644
index d52da4020fc..00000000000
--- a/test/EFCore.Relational.Tests/Query/RelationalQueryContextDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Query
-{
- public class RelationalQueryContextDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- RelationalTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Relational.Tests/Query/RelationalQueryTranslationPostprocessorDependenciesTest.cs b/test/EFCore.Relational.Tests/Query/RelationalQueryTranslationPostprocessorDependenciesTest.cs
deleted file mode 100644
index 9b6320a8812..00000000000
--- a/test/EFCore.Relational.Tests/Query/RelationalQueryTranslationPostprocessorDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Query
-{
- public class RelationalQueryTranslationPostprocessorDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- RelationalTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Relational.Tests/Query/RelationalQueryTranslationPreprocessorDependenciesTest.cs b/test/EFCore.Relational.Tests/Query/RelationalQueryTranslationPreprocessorDependenciesTest.cs
deleted file mode 100644
index e3fa8fe0d12..00000000000
--- a/test/EFCore.Relational.Tests/Query/RelationalQueryTranslationPreprocessorDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Query
-{
- public class RelationalQueryTranslationPreprocessorDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- RelationalTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Relational.Tests/Query/RelationalQueryableMethodTranslatingExpressionVisitorDependenciesTest.cs b/test/EFCore.Relational.Tests/Query/RelationalQueryableMethodTranslatingExpressionVisitorDependenciesTest.cs
deleted file mode 100644
index 208df1b1cb0..00000000000
--- a/test/EFCore.Relational.Tests/Query/RelationalQueryableMethodTranslatingExpressionVisitorDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Query
-{
- public class RelationalQueryableMethodTranslatingExpressionVisitorDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- RelationalTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Relational.Tests/Query/RelationalShapedQueryCompilingExpressionVisitorDependenciesTest.cs b/test/EFCore.Relational.Tests/Query/RelationalShapedQueryCompilingExpressionVisitorDependenciesTest.cs
deleted file mode 100644
index 6ee4e6d9fb5..00000000000
--- a/test/EFCore.Relational.Tests/Query/RelationalShapedQueryCompilingExpressionVisitorDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Query
-{
- public class RelationalShapedQueryCompilingExpressionVisitorDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- RelationalTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Relational.Tests/RelationalApiConsistencyTest.cs b/test/EFCore.Relational.Tests/RelationalApiConsistencyTest.cs
index e289486ffa4..e496bfcd45b 100644
--- a/test/EFCore.Relational.Tests/RelationalApiConsistencyTest.cs
+++ b/test/EFCore.Relational.Tests/RelationalApiConsistencyTest.cs
@@ -24,16 +24,19 @@ public RelationalApiConsistencyTest(RelationalApiConsistencyFixture fixture)
{
}
-
protected override void AddServices(ServiceCollection serviceCollection)
- {
- new EntityFrameworkRelationalServicesBuilder(serviceCollection).TryAddCoreServices();
- }
+ => new EntityFrameworkRelationalServicesBuilder(serviceCollection).TryAddCoreServices();
protected override Assembly TargetAssembly => typeof(RelationalDatabase).Assembly;
public class RelationalApiConsistencyFixture : ApiConsistencyFixtureBase
{
+ public override bool TryGetProviderOptionsDelegate(out Action configureOptions)
+ {
+ configureOptions = null;
+ return false;
+ }
+
private static Dictionary _metadataTypes
=> new Dictionary
{
diff --git a/test/EFCore.Relational.Tests/RelationalMemberTranslatorProviderDependenciesTest.cs b/test/EFCore.Relational.Tests/RelationalMemberTranslatorProviderDependenciesTest.cs
deleted file mode 100644
index a869e28845e..00000000000
--- a/test/EFCore.Relational.Tests/RelationalMemberTranslatorProviderDependenciesTest.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.Query;
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore
-{
- public class RelationalMemberTranslatorProviderDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- RelationalTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Relational.Tests/RelationalMethodCallTranslatorProviderDependenciesTest.cs b/test/EFCore.Relational.Tests/RelationalMethodCallTranslatorProviderDependenciesTest.cs
deleted file mode 100644
index a93b095fc94..00000000000
--- a/test/EFCore.Relational.Tests/RelationalMethodCallTranslatorProviderDependenciesTest.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.Query;
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore
-{
- public class RelationalMethodCallTranslatorProviderDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- RelationalTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Relational.Tests/RelationalSqlTranslatingExpressionVisitorDependenciesTest.cs b/test/EFCore.Relational.Tests/RelationalSqlTranslatingExpressionVisitorDependenciesTest.cs
deleted file mode 100644
index 776b7b39288..00000000000
--- a/test/EFCore.Relational.Tests/RelationalSqlTranslatingExpressionVisitorDependenciesTest.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.Query;
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore
-{
- public class RelationalSqlTranslatingExpressionVisitorDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- RelationalTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Relational.Tests/SqlExpressionFactoryDependenciesTest.cs b/test/EFCore.Relational.Tests/SqlExpressionFactoryDependenciesTest.cs
deleted file mode 100644
index cb0cc1a3fe9..00000000000
--- a/test/EFCore.Relational.Tests/SqlExpressionFactoryDependenciesTest.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.Query;
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore
-{
- public class SqlExpressionFactoryDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- RelationalTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Relational.Tests/Storage/ParameterNameGeneratorDependenciesTest.cs b/test/EFCore.Relational.Tests/Storage/ParameterNameGeneratorDependenciesTest.cs
deleted file mode 100644
index ef07c549764..00000000000
--- a/test/EFCore.Relational.Tests/Storage/ParameterNameGeneratorDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Storage
-{
- public class ParameterNameGeneratorDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- RelationalTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Relational.Tests/Storage/RelationalCommandBuilderDependenciesTest.cs b/test/EFCore.Relational.Tests/Storage/RelationalCommandBuilderDependenciesTest.cs
deleted file mode 100644
index 1d1a8f1d591..00000000000
--- a/test/EFCore.Relational.Tests/Storage/RelationalCommandBuilderDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Storage
-{
- public class RelationalCommandBuilderDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- RelationalTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Relational.Tests/Storage/RelationalConnectionDependenciesTest.cs b/test/EFCore.Relational.Tests/Storage/RelationalConnectionDependenciesTest.cs
deleted file mode 100644
index 2ef5191ce7d..00000000000
--- a/test/EFCore.Relational.Tests/Storage/RelationalConnectionDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Storage
-{
- public class RelationalConnectionDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- RelationalTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Relational.Tests/Storage/RelationalDatabaseCreatorDependenciesTest.cs b/test/EFCore.Relational.Tests/Storage/RelationalDatabaseCreatorDependenciesTest.cs
deleted file mode 100644
index f9829d37b9e..00000000000
--- a/test/EFCore.Relational.Tests/Storage/RelationalDatabaseCreatorDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Storage
-{
- public class RelationalDatabaseCreatorDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- RelationalTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Relational.Tests/Storage/RelationalDatabaseDependenciesTest.cs b/test/EFCore.Relational.Tests/Storage/RelationalDatabaseDependenciesTest.cs
deleted file mode 100644
index 7c68fb584b6..00000000000
--- a/test/EFCore.Relational.Tests/Storage/RelationalDatabaseDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Storage
-{
- public class RelationalDatabaseDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- RelationalTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Relational.Tests/Storage/RelationalSqlGenerationHelperDependenciesTest.cs b/test/EFCore.Relational.Tests/Storage/RelationalSqlGenerationHelperDependenciesTest.cs
deleted file mode 100644
index 5de244e1dea..00000000000
--- a/test/EFCore.Relational.Tests/Storage/RelationalSqlGenerationHelperDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Storage
-{
- public class RelationalSqlGenerationHelperDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- RelationalTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Relational.Tests/TestUtilities/RelationalTestHelpers.cs b/test/EFCore.Relational.Tests/TestUtilities/RelationalTestHelpers.cs
index 18552a9eda0..839d0ac40af 100644
--- a/test/EFCore.Relational.Tests/TestUtilities/RelationalTestHelpers.cs
+++ b/test/EFCore.Relational.Tests/TestUtilities/RelationalTestHelpers.cs
@@ -18,10 +18,8 @@ protected RelationalTestHelpers()
public override IServiceCollection AddProviderServices(IServiceCollection services)
=> FakeRelationalOptionsExtension.AddEntityFrameworkRelationalDatabase(services);
- protected override void UseProviderOptions(DbContextOptionsBuilder optionsBuilder)
- {
- optionsBuilder.UseFakeRelational();
- }
+ public override void UseProviderOptions(DbContextOptionsBuilder optionsBuilder)
+ => optionsBuilder.UseFakeRelational();
public override LoggingDefinitions LoggingDefinitions { get; } = new TestRelationalLoggingDefinitions();
}
diff --git a/test/EFCore.Relational.Tests/Update/UpdateSqlGeneratorDependenciesTest.cs b/test/EFCore.Relational.Tests/Update/UpdateSqlGeneratorDependenciesTest.cs
deleted file mode 100644
index 7c728fb2a64..00000000000
--- a/test/EFCore.Relational.Tests/Update/UpdateSqlGeneratorDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Update
-{
- public class UpdateSqlGeneratorDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- RelationalTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Specification.Tests/TestUtilities/TestHelpers.cs b/test/EFCore.Specification.Tests/TestUtilities/TestHelpers.cs
index a217f19bb03..4290b58784a 100644
--- a/test/EFCore.Specification.Tests/TestUtilities/TestHelpers.cs
+++ b/test/EFCore.Specification.Tests/TestUtilities/TestHelpers.cs
@@ -23,69 +23,6 @@ namespace Microsoft.EntityFrameworkCore.TestUtilities
{
public abstract class TestHelpers
{
- ///
- /// Tests that calling the 'With' method for each constructor-injected service creates a clone
- /// of TDependencies with only that service replaced.
- ///
- public void TestDependenciesClone(params string[] ignoreProperties)
- {
- var customServices = new ServiceCollection()
- .AddScoped(CreateOptions)
- .AddScoped()
- .AddScoped();
-
- var services1 = CreateServiceProvider(customServices).CreateScope().ServiceProvider;
- var services2 = CreateServiceProvider(customServices).CreateScope().ServiceProvider;
-
- var dependencies = services1.GetService();
-
- var serviceProperties = typeof(TDependencies).GetTypeInfo()
- .DeclaredProperties
- .Where(p => !ignoreProperties.Contains(p.Name))
- .ToList();
-
- var obsoleteTypes = serviceProperties
- .Where(p => p.CustomAttributes.Any(a => a.AttributeType == typeof(ObsoleteAttribute)))
- .Select(p => p.PropertyType)
- .ToList();
-
- serviceProperties = serviceProperties.Where(p => !obsoleteTypes.Contains(p.PropertyType)).ToList();
-
- var constructor = typeof(TDependencies).GetTypeInfo().DeclaredConstructors.OrderByDescending(c => c.GetParameters().Length)
- .First();
- var constructorParameters = constructor.GetParameters().Where(p => !obsoleteTypes.Contains(p.ParameterType)).ToList();
-
- foreach (var serviceType in constructorParameters.Select(p => p.ParameterType))
- {
- var withMethod = typeof(TDependencies).GetTypeInfo().DeclaredMethods
- .Single(
- m => m.CustomAttributes.All(a => a.AttributeType != typeof(ObsoleteAttribute))
- && m.Name == "With"
- && m.GetParameters()[0].ParameterType == serviceType);
-
- var clone = withMethod.Invoke(dependencies, new[] { services2.GetService(serviceType) });
-
- foreach (var property in serviceProperties)
- {
- if (property.PropertyType == serviceType)
- {
- Assert.NotSame(property.GetValue(clone), property.GetValue(dependencies));
- }
- else
- {
- Assert.Equal(property.GetValue(clone), property.GetValue(dependencies));
- }
- }
- }
- }
-
- // ReSharper disable once ClassNeverInstantiated.Local
- private class FakeCurrentDbContext : ICurrentDbContext
- {
- // ReSharper disable once UnassignedGetOnlyAutoProperty
- public DbContext Context { get; }
- }
-
public DbContextOptions CreateOptions(IModel model, IServiceProvider serviceProvider = null)
{
var optionsBuilder = new DbContextOptionsBuilder()
@@ -135,7 +72,7 @@ public DbContextOptionsBuilder AddProviderOptions(DbContextOptionsBuilder option
return optionsBuilder;
}
- protected abstract void UseProviderOptions(DbContextOptionsBuilder optionsBuilder);
+ public abstract void UseProviderOptions(DbContextOptionsBuilder optionsBuilder);
public DbContext CreateContext(IServiceProvider serviceProvider, IModel model)
=> new DbContext(CreateOptions(model, serviceProvider));
diff --git a/test/EFCore.SqlServer.FunctionalTests/TestUtilities/SqlServerTestHelpers.cs b/test/EFCore.SqlServer.FunctionalTests/TestUtilities/SqlServerTestHelpers.cs
index 8d64bfc5b24..a132c9b3f55 100644
--- a/test/EFCore.SqlServer.FunctionalTests/TestUtilities/SqlServerTestHelpers.cs
+++ b/test/EFCore.SqlServer.FunctionalTests/TestUtilities/SqlServerTestHelpers.cs
@@ -19,7 +19,7 @@ protected SqlServerTestHelpers()
public override IServiceCollection AddProviderServices(IServiceCollection services)
=> services.AddEntityFrameworkSqlServer();
- protected override void UseProviderOptions(DbContextOptionsBuilder optionsBuilder)
+ public override void UseProviderOptions(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseSqlServer(new SqlConnection("Database=DummyDatabase"));
public override LoggingDefinitions LoggingDefinitions { get; } = new SqlServerLoggingDefinitions();
diff --git a/test/EFCore.SqlServer.Tests/SqlServerApiConsistencyTest.cs b/test/EFCore.SqlServer.Tests/SqlServerApiConsistencyTest.cs
index d08afed1ed1..4af42a0cbd7 100644
--- a/test/EFCore.SqlServer.Tests/SqlServerApiConsistencyTest.cs
+++ b/test/EFCore.SqlServer.Tests/SqlServerApiConsistencyTest.cs
@@ -8,6 +8,7 @@
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal;
+using Microsoft.EntityFrameworkCore.TestUtilities;
using Microsoft.Extensions.DependencyInjection;
namespace Microsoft.EntityFrameworkCore
@@ -20,14 +21,19 @@ public SqlServerApiConsistencyTest(SqlServerApiConsistencyFixture fixture)
}
protected override void AddServices(ServiceCollection serviceCollection)
- {
- serviceCollection.AddEntityFrameworkSqlServer();
- }
+ => serviceCollection.AddEntityFrameworkSqlServer();
protected override Assembly TargetAssembly => typeof(SqlServerConnection).Assembly;
public class SqlServerApiConsistencyFixture : ApiConsistencyFixtureBase
{
+ public override bool TryGetProviderOptionsDelegate(out Action configureOptions)
+ {
+ configureOptions = b => SqlServerTestHelpers.Instance.UseProviderOptions(b);
+
+ return true;
+ }
+
public override HashSet FluentApiTypes { get; } = new HashSet()
{
typeof(SqlServerDbContextOptionsBuilder),
diff --git a/test/EFCore.SqlServer.Tests/SqlServerNTSApiConsistencyTest.cs b/test/EFCore.SqlServer.Tests/SqlServerNTSApiConsistencyTest.cs
index 0036e389675..f7dd61a77de 100644
--- a/test/EFCore.SqlServer.Tests/SqlServerNTSApiConsistencyTest.cs
+++ b/test/EFCore.SqlServer.Tests/SqlServerNTSApiConsistencyTest.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using System.Reflection;
+using Microsoft.EntityFrameworkCore.TestUtilities;
using Microsoft.Extensions.DependencyInjection;
namespace Microsoft.EntityFrameworkCore
@@ -16,15 +17,20 @@ public SqlServerNTSApiConsistencyTest(SqlServerNTSApiConsistencyFixture fixture)
}
protected override void AddServices(ServiceCollection serviceCollection)
- {
- serviceCollection.AddEntityFrameworkSqlServerNetTopologySuite();
- }
+ => serviceCollection.AddEntityFrameworkSqlServerNetTopologySuite();
protected override Assembly TargetAssembly
=> typeof(SqlServerNetTopologySuiteServiceCollectionExtensions).Assembly;
public class SqlServerNTSApiConsistencyFixture : ApiConsistencyFixtureBase
{
+ public override bool TryGetProviderOptionsDelegate(out Action configureOptions)
+ {
+ configureOptions = b => SqlServerTestHelpers.Instance.UseProviderOptions(b);
+
+ return true;
+ }
+
public override HashSet FluentApiTypes { get; } = new HashSet()
{
typeof(SqlServerNetTopologySuiteDbContextOptionsBuilderExtensions),
diff --git a/test/EFCore.Sqlite.FunctionalTests/TestUtilities/SqliteTestHelpers.cs b/test/EFCore.Sqlite.FunctionalTests/TestUtilities/SqliteTestHelpers.cs
index d6f467cfc1e..a15d104031e 100644
--- a/test/EFCore.Sqlite.FunctionalTests/TestUtilities/SqliteTestHelpers.cs
+++ b/test/EFCore.Sqlite.FunctionalTests/TestUtilities/SqliteTestHelpers.cs
@@ -19,7 +19,7 @@ protected SqliteTestHelpers()
public override IServiceCollection AddProviderServices(IServiceCollection services)
=> services.AddEntityFrameworkSqlite();
- protected override void UseProviderOptions(DbContextOptionsBuilder optionsBuilder)
+ public override void UseProviderOptions(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseSqlite(new SqliteConnection("Data Source=:memory:"));
public override LoggingDefinitions LoggingDefinitions { get; } = new SqliteLoggingDefinitions();
diff --git a/test/EFCore.Sqlite.Tests/SqliteApiConsistencyTest.cs b/test/EFCore.Sqlite.Tests/SqliteApiConsistencyTest.cs
index ef4fc7639d5..ed2ff7d49bb 100644
--- a/test/EFCore.Sqlite.Tests/SqliteApiConsistencyTest.cs
+++ b/test/EFCore.Sqlite.Tests/SqliteApiConsistencyTest.cs
@@ -6,6 +6,7 @@
using System.Reflection;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Sqlite.Storage.Internal;
+using Microsoft.EntityFrameworkCore.TestUtilities;
using Microsoft.Extensions.DependencyInjection;
namespace Microsoft.EntityFrameworkCore
@@ -18,14 +19,19 @@ public SqliteApiConsistencyTest(SqliteApiConsistencyFixture fixture)
}
protected override void AddServices(ServiceCollection serviceCollection)
- {
- serviceCollection.AddEntityFrameworkSqlite();
- }
+ => serviceCollection.AddEntityFrameworkSqlite();
protected override Assembly TargetAssembly => typeof(SqliteRelationalConnection).Assembly;
public class SqliteApiConsistencyFixture : ApiConsistencyFixtureBase
{
+ public override bool TryGetProviderOptionsDelegate(out Action configureOptions)
+ {
+ configureOptions = b => SqliteTestHelpers.Instance.UseProviderOptions(b);
+
+ return true;
+ }
+
public override HashSet FluentApiTypes { get; } = new HashSet()
{
typeof(SqliteServiceCollectionExtensions),
diff --git a/test/EFCore.Sqlite.Tests/SqliteNTSApiConsistencyTest.cs b/test/EFCore.Sqlite.Tests/SqliteNTSApiConsistencyTest.cs
index d1c4516c01b..82c38ca80dc 100644
--- a/test/EFCore.Sqlite.Tests/SqliteNTSApiConsistencyTest.cs
+++ b/test/EFCore.Sqlite.Tests/SqliteNTSApiConsistencyTest.cs
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using System.Reflection;
+using Microsoft.EntityFrameworkCore.TestUtilities;
using Microsoft.Extensions.DependencyInjection;
namespace Microsoft.EntityFrameworkCore
@@ -16,15 +17,20 @@ public SqliteNTSApiConsistencyTest(SqliteNTSApiConsistencyFixture fixture)
}
protected override void AddServices(ServiceCollection serviceCollection)
- {
- serviceCollection.AddEntityFrameworkSqliteNetTopologySuite();
- }
+ => serviceCollection.AddEntityFrameworkSqliteNetTopologySuite();
protected override Assembly TargetAssembly
=> typeof(SqliteNetTopologySuiteServiceCollectionExtensions).Assembly;
public class SqliteNTSApiConsistencyFixture : ApiConsistencyFixtureBase
{
+ public override bool TryGetProviderOptionsDelegate(out Action configureOptions)
+ {
+ configureOptions = b => SqliteTestHelpers.Instance.UseProviderOptions(b);
+
+ return true;
+ }
+
public override HashSet FluentApiTypes { get; } = new HashSet()
{
typeof(SqliteNetTopologySuiteDbContextOptionsBuilderExtensions),
diff --git a/test/EFCore.Tests/ApiConsistencyTest.cs b/test/EFCore.Tests/ApiConsistencyTest.cs
index f230f29b6ca..66384df2a60 100644
--- a/test/EFCore.Tests/ApiConsistencyTest.cs
+++ b/test/EFCore.Tests/ApiConsistencyTest.cs
@@ -27,6 +27,7 @@ public ApiConsistencyTest(ApiConsistencyFixture fixture)
protected override void AddServices(ServiceCollection serviceCollection)
=> new EntityFrameworkServicesBuilder(serviceCollection).TryAddCoreServices();
+
public class ApiConsistencyFixture : ApiConsistencyFixtureBase
{
protected override void Initialize()
@@ -36,6 +37,12 @@ protected override void Initialize()
base.Initialize();
}
+ public override bool TryGetProviderOptionsDelegate(out Action configureOptions)
+ {
+ configureOptions = null;
+ return false;
+ }
+
public override HashSet FluentApiTypes { get; } = new HashSet
{
typeof(ModelBuilder),
diff --git a/test/EFCore.Tests/ApiConsistencyTestBase.cs b/test/EFCore.Tests/ApiConsistencyTestBase.cs
index f523942ba66..6cdb6581986 100644
--- a/test/EFCore.Tests/ApiConsistencyTestBase.cs
+++ b/test/EFCore.Tests/ApiConsistencyTestBase.cs
@@ -12,6 +12,10 @@
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
+using Microsoft.EntityFrameworkCore.Metadata.Conventions.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata.Internal;
+using Microsoft.EntityFrameworkCore.Query;
+using Microsoft.EntityFrameworkCore.TestUtilities;
using Microsoft.Extensions.DependencyInjection;
using Xunit;
@@ -503,6 +507,119 @@ private string ValidateConventionMethod(MethodInfo conventionMethod)
return null;
}
+ [ConditionalFact]
+ public virtual void Ensure_dependency_objects_are_consistent()
+ {
+ var serviceCollection = new ServiceCollection();
+
+ AddServices(serviceCollection);
+
+ var dependencyServices = serviceCollection.Where(
+ sd => sd.ServiceType.Namespace.StartsWith("Microsoft.Entity", StringComparison.Ordinal)
+ && sd.ServiceType.Name.EndsWith("Dependencies", StringComparison.Ordinal)
+ && sd.ImplementationType == sd.ServiceType)
+ .ToList();
+
+ foreach (var service in dependencyServices)
+ {
+ TestDependenciesObject(service.ImplementationType);
+ }
+ }
+
+ // ReSharper disable once ClassNeverInstantiated.Local
+ private class FakeCurrentDbContext : ICurrentDbContext
+ {
+ // ReSharper disable once UnassignedGetOnlyAutoProperty
+ public DbContext Context { get; }
+ }
+
+ private void TestDependenciesObject(Type dependenciesType)
+ {
+ if (!TryCreateProviderServices(out var serviceCollection1))
+ {
+ return;
+ }
+
+ AddServices(serviceCollection1);
+ var services1 = serviceCollection1.BuildServiceProvider();
+
+ TryCreateProviderServices(out var serviceCollection2);
+ AddServices(serviceCollection2);
+ var services2 = serviceCollection2.BuildServiceProvider();
+
+ var dependencies = services1.GetService(dependenciesType);
+
+ var serviceProperties = dependenciesType.GetTypeInfo()
+ .DeclaredProperties
+ .Where(p => !Fixture.ComputedDependencyProperties.Contains(p))
+ .ToList();
+
+ var obsoleteTypes = serviceProperties
+ .Where(p => p.CustomAttributes.Any(a => a.AttributeType == typeof(ObsoleteAttribute)))
+ .Select(p => p.PropertyType)
+ .ToList();
+
+ serviceProperties = serviceProperties.Where(p => !obsoleteTypes.Contains(p.PropertyType)).ToList();
+
+ var constructor = dependenciesType.GetTypeInfo().DeclaredConstructors.OrderByDescending(c => c.GetParameters().Length).First();
+ var constructorParameters = constructor.GetParameters().Where(p => !obsoleteTypes.Contains(p.ParameterType)).ToList();
+
+ foreach (var serviceType in constructorParameters.Select(p => p.ParameterType))
+ {
+ var withMethod = dependenciesType.GetTypeInfo().DeclaredMethods
+ .FirstOrDefault(
+ m => m.CustomAttributes.All(a => a.AttributeType != typeof(ObsoleteAttribute))
+ && m.Name == "With"
+ && m.GetParameters()[0].ParameterType == serviceType);
+
+ if (withMethod == null)
+ {
+ throw new Exception(
+ $"Expected 'With' method for service type '{serviceType.ShortDisplayName()}' on '{dependenciesType.ShortDisplayName()}'");
+ }
+
+ var clone = withMethod.Invoke(dependencies, new[] { services2.GetService(serviceType) });
+
+ foreach (var property in serviceProperties)
+ {
+ if (property.PropertyType == serviceType)
+ {
+ Assert.NotSame(property.GetValue(clone), property.GetValue(dependencies));
+ }
+ else
+ {
+ Assert.Equal(property.GetValue(clone), property.GetValue(dependencies));
+ }
+ }
+ }
+
+ bool TryCreateProviderServices(out ServiceCollection services)
+ {
+ if (!Fixture.TryGetProviderOptionsDelegate(out var optionsDelegate))
+ {
+ services = null;
+ return false;
+ }
+
+ services = (ServiceCollection)new ServiceCollection()
+ .AddScoped(p => CreateOptions(p, optionsDelegate))
+ .AddScoped()
+ .AddScoped();
+
+ return true;
+ }
+
+ DbContextOptions CreateOptions(IServiceProvider serviceProvider, Action optionsDelegate)
+ {
+ var optionsBuilder = new DbContextOptionsBuilder()
+ .UseInternalServiceProvider(serviceProvider);
+
+ optionsDelegate(optionsBuilder);
+
+ return optionsBuilder.Options;
+ }
+ }
+
[ConditionalFact]
public virtual void Service_implementations_should_use_dependencies_parameter_object()
{
@@ -741,6 +858,8 @@ protected ApiConsistencyFixtureBase()
Initialize();
}
+ public abstract bool TryGetProviderOptionsDelegate (out Action configureOptions);
+
public virtual HashSet FluentApiTypes { get; } = new HashSet();
public virtual HashSet NonVirtualMethods { get; } = new HashSet();
public virtual HashSet NotAnnotatedMethods { get; } = new HashSet();
@@ -748,6 +867,17 @@ protected ApiConsistencyFixtureBase()
public virtual HashSet UnmatchedMetadataMethods { get; } = new HashSet();
public virtual HashSet MetadataMethodExceptions { get; } = new HashSet();
+ public virtual HashSet ComputedDependencyProperties { get; }
+ = new HashSet
+ {
+ typeof(ProviderConventionSetBuilderDependencies).GetProperty(nameof(ProviderConventionSetBuilderDependencies.ContextType)),
+ typeof(QueryCompilationContextDependencies).GetProperty(nameof(QueryCompilationContextDependencies.ContextType)),
+ typeof(QueryCompilationContextDependencies).GetProperty(nameof(QueryCompilationContextDependencies.IsTracking)),
+ typeof(QueryContextDependencies).GetProperty(nameof(QueryContextDependencies.StateManager)),
+ typeof(QueryContextDependencies).GetProperty(nameof(QueryContextDependencies.QueryProvider))
+ };
+
+
public Dictionary MetadataTypes { get; }
= new Dictionary
{
diff --git a/test/EFCore.Tests/Infrastructure/ModelCacheKeyFactoryDependenciesTest.cs b/test/EFCore.Tests/Infrastructure/ModelCacheKeyFactoryDependenciesTest.cs
deleted file mode 100644
index 9c9bb891aea..00000000000
--- a/test/EFCore.Tests/Infrastructure/ModelCacheKeyFactoryDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Infrastructure
-{
- public class ModelCacheKeyFactoryDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- InMemoryTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Tests/Infrastructure/ModelCustomizerDependenciesTest.cs b/test/EFCore.Tests/Infrastructure/ModelCustomizerDependenciesTest.cs
deleted file mode 100644
index 5232553b701..00000000000
--- a/test/EFCore.Tests/Infrastructure/ModelCustomizerDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Infrastructure
-{
- public class ModelCustomizerDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- InMemoryTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Tests/Infrastructure/ModelValidatorDependenciesTest.cs b/test/EFCore.Tests/Infrastructure/ModelValidatorDependenciesTest.cs
deleted file mode 100644
index d32229184ea..00000000000
--- a/test/EFCore.Tests/Infrastructure/ModelValidatorDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Infrastructure
-{
- public class ModelValidatorDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- InMemoryTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Tests/ModelSourceDependenciesTest.cs b/test/EFCore.Tests/ModelSourceDependenciesTest.cs
deleted file mode 100644
index 99a6425af59..00000000000
--- a/test/EFCore.Tests/ModelSourceDependenciesTest.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore
-{
- public class ModelSourceDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- InMemoryTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Tests/Query/CompiledQueryCacheKeyGeneratorDependenciesTest.cs b/test/EFCore.Tests/Query/CompiledQueryCacheKeyGeneratorDependenciesTest.cs
deleted file mode 100644
index ddd60403e24..00000000000
--- a/test/EFCore.Tests/Query/CompiledQueryCacheKeyGeneratorDependenciesTest.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-// ReSharper disable InconsistentNaming
-namespace Microsoft.EntityFrameworkCore.Query
-{
- public class CompiledQueryCacheKeyGeneratorDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- InMemoryTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Tests/Query/EntityMaterializerSourceDependenciesTest.cs b/test/EFCore.Tests/Query/EntityMaterializerSourceDependenciesTest.cs
deleted file mode 100644
index 2ab71c9f696..00000000000
--- a/test/EFCore.Tests/Query/EntityMaterializerSourceDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Query
-{
- public class EntityMaterializerSourceDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- InMemoryTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Tests/Query/EvaluatableExpressionFilterDependenciesTest.cs b/test/EFCore.Tests/Query/EvaluatableExpressionFilterDependenciesTest.cs
deleted file mode 100644
index 63132f1bb85..00000000000
--- a/test/EFCore.Tests/Query/EvaluatableExpressionFilterDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Query
-{
- public class EvaluatableExpressionFilterDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- InMemoryTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Tests/Query/QueryCompilationContextDependenciesTest.cs b/test/EFCore.Tests/Query/QueryCompilationContextDependenciesTest.cs
deleted file mode 100644
index a2414682e7f..00000000000
--- a/test/EFCore.Tests/Query/QueryCompilationContextDependenciesTest.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-// ReSharper disable InconsistentNaming
-namespace Microsoft.EntityFrameworkCore.Query
-{
- public class QueryCompilationContextDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- InMemoryTestHelpers.Instance.TestDependenciesClone(
- nameof(QueryCompilationContextDependencies.IsTracking),
- nameof(QueryCompilationContextDependencies.ContextType));
- }
- }
-}
diff --git a/test/EFCore.Tests/Query/QueryContextDependenciesTest.cs b/test/EFCore.Tests/Query/QueryContextDependenciesTest.cs
deleted file mode 100644
index 8b1e75803de..00000000000
--- a/test/EFCore.Tests/Query/QueryContextDependenciesTest.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Query
-{
- public class QueryContextDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- InMemoryTestHelpers.Instance.TestDependenciesClone(
- nameof(QueryContextDependencies.StateManager),
- nameof(QueryContextDependencies.QueryProvider));
- }
- }
-}
diff --git a/test/EFCore.Tests/Query/QueryTranslationPostprocessorDependenciesDependenciesTest.cs b/test/EFCore.Tests/Query/QueryTranslationPostprocessorDependenciesDependenciesTest.cs
deleted file mode 100644
index 00dd23caaff..00000000000
--- a/test/EFCore.Tests/Query/QueryTranslationPostprocessorDependenciesDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Query
-{
- public class QueryTranslationPostprocessorDependenciesDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- InMemoryTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Tests/Query/QueryTranslationPreprocessorDependenciesTest.cs b/test/EFCore.Tests/Query/QueryTranslationPreprocessorDependenciesTest.cs
deleted file mode 100644
index d20fd1a30c9..00000000000
--- a/test/EFCore.Tests/Query/QueryTranslationPreprocessorDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Query
-{
- public class QueryTranslationPreprocessorDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- InMemoryTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Tests/Query/QueryableMethodTranslatingExpressionVisitorDependenciesTest.cs b/test/EFCore.Tests/Query/QueryableMethodTranslatingExpressionVisitorDependenciesTest.cs
deleted file mode 100644
index e383022195f..00000000000
--- a/test/EFCore.Tests/Query/QueryableMethodTranslatingExpressionVisitorDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Query
-{
- public class QueryableMethodTranslatingExpressionVisitorDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- InMemoryTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Tests/Query/ShapedQueryCompilingExpressionVisitorDependenciesTest.cs b/test/EFCore.Tests/Query/ShapedQueryCompilingExpressionVisitorDependenciesTest.cs
deleted file mode 100644
index 458d00d8cb2..00000000000
--- a/test/EFCore.Tests/Query/ShapedQueryCompilingExpressionVisitorDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Query
-{
- public class ShapedQueryCompilingExpressionVisitorDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- InMemoryTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Tests/Storage/DatabaseDependenciesTest.cs b/test/EFCore.Tests/Storage/DatabaseDependenciesTest.cs
deleted file mode 100644
index 0460d7f605f..00000000000
--- a/test/EFCore.Tests/Storage/DatabaseDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Storage
-{
- public class DatabaseDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- InMemoryTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Tests/Storage/DatabaseProviderDependenciesTest.cs b/test/EFCore.Tests/Storage/DatabaseProviderDependenciesTest.cs
deleted file mode 100644
index 31277bee04f..00000000000
--- a/test/EFCore.Tests/Storage/DatabaseProviderDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Storage
-{
- public class DatabaseProviderDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- InMemoryTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Tests/Storage/ExecutionStrategyDependenciesTest.cs b/test/EFCore.Tests/Storage/ExecutionStrategyDependenciesTest.cs
deleted file mode 100644
index ff8b125665f..00000000000
--- a/test/EFCore.Tests/Storage/ExecutionStrategyDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.Storage
-{
- public class ExecutionStrategyDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- InMemoryTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Tests/ValueGeneration/ValueGeneratorCacheDependenciesTest.cs b/test/EFCore.Tests/ValueGeneration/ValueGeneratorCacheDependenciesTest.cs
deleted file mode 100644
index 5c9ec4c9a8c..00000000000
--- a/test/EFCore.Tests/ValueGeneration/ValueGeneratorCacheDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.ValueGeneration
-{
- public class ValueGeneratorCacheDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- InMemoryTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}
diff --git a/test/EFCore.Tests/ValueGeneration/ValueGeneratorSelectorDependenciesTest.cs b/test/EFCore.Tests/ValueGeneration/ValueGeneratorSelectorDependenciesTest.cs
deleted file mode 100644
index 062e7a8fcfb..00000000000
--- a/test/EFCore.Tests/ValueGeneration/ValueGeneratorSelectorDependenciesTest.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using Microsoft.EntityFrameworkCore.TestUtilities;
-using Xunit;
-
-namespace Microsoft.EntityFrameworkCore.ValueGeneration
-{
- public class ValueGeneratorSelectorDependenciesTest
- {
- [ConditionalFact]
- public void Can_use_With_methods_to_clone_and_replace_service()
- {
- InMemoryTestHelpers.Instance.TestDependenciesClone();
- }
- }
-}