diff --git a/src/StrawberryShake/Client/src/Core/IClientBuilder.cs b/src/StrawberryShake/Client/src/Core/IClientBuilder.cs
index 89f5045b7b8..e2d7a55342d 100644
--- a/src/StrawberryShake/Client/src/Core/IClientBuilder.cs
+++ b/src/StrawberryShake/Client/src/Core/IClientBuilder.cs
@@ -5,18 +5,8 @@ namespace StrawberryShake;
///
/// Represents a builder that can be used to configure a client
///
-public interface IClientBuilder where T : IStoreAccessor
+public interface IClientBuilder : IScopedClientBuilder where T : IStoreAccessor
{
- ///
- /// The name of the client
- ///
- public string ClientName { get; }
-
- ///
- /// The this client was registered to
- ///
- public IServiceCollection Services { get; }
-
///
/// The of the client
///
diff --git a/src/StrawberryShake/Client/src/Core/IScopedClientBuilder.cs b/src/StrawberryShake/Client/src/Core/IScopedClientBuilder.cs
new file mode 100644
index 00000000000..b66ef32cb45
--- /dev/null
+++ b/src/StrawberryShake/Client/src/Core/IScopedClientBuilder.cs
@@ -0,0 +1,19 @@
+using Microsoft.Extensions.DependencyInjection;
+
+namespace StrawberryShake;
+
+///
+/// Represents a builder that can be used to configure a client
+///
+public interface IScopedClientBuilder where T : IStoreAccessor
+{
+ ///
+ /// The name of the client
+ ///
+ public string ClientName { get; }
+
+ ///
+ /// The this client was registered to
+ ///
+ public IServiceCollection Services { get; }
+}
diff --git a/src/StrawberryShake/Client/src/Core/ScopedClientBuilder.cs b/src/StrawberryShake/Client/src/Core/ScopedClientBuilder.cs
new file mode 100644
index 00000000000..ae6ef4d2525
--- /dev/null
+++ b/src/StrawberryShake/Client/src/Core/ScopedClientBuilder.cs
@@ -0,0 +1,27 @@
+using Microsoft.Extensions.DependencyInjection;
+
+namespace StrawberryShake;
+
+///
+///
+/// Initializes a new instance of a
+///
+///
+/// The name of the client
+///
+///
+/// The service collection this client was registered to
+///
+public class ScopedClientBuilder(
+ string clientName,
+ IServiceCollection services)
+ : IScopedClientBuilder
+ where T : IStoreAccessor
+{
+
+ ///
+ public string ClientName { get; } = clientName;
+
+ ///
+ public IServiceCollection Services { get; } = services;
+}
diff --git a/src/StrawberryShake/Client/src/Transport.Http/HttpClientBuilderExtensions.cs b/src/StrawberryShake/Client/src/Transport.Http/HttpClientBuilderExtensions.cs
index 343e481b987..d05091463a0 100644
--- a/src/StrawberryShake/Client/src/Transport.Http/HttpClientBuilderExtensions.cs
+++ b/src/StrawberryShake/Client/src/Transport.Http/HttpClientBuilderExtensions.cs
@@ -33,6 +33,56 @@ public static IClientBuilder ConfigureHttpClient(
Action configureClient,
Action? configureClientBuilder = null)
where T : IStoreAccessor
+ {
+ ConfigureHttpClient((IScopedClientBuilder)clientBuilder, configureClient, configureClientBuilder);
+ return clientBuilder;
+ }
+
+ ///
+ /// Adds the and related services to the
+ /// and configures a
+ /// with the correct name
+ ///
+ ///
+ /// The
+ ///
+ ///
+ /// A delegate that is used to configure an .
+ ///
+ ///
+ /// A delegate that is used to additionally configure the
+ /// with a
+ ///
+ public static IClientBuilder ConfigureHttpClient(
+ this IClientBuilder clientBuilder,
+ Action configureClient,
+ Action? configureClientBuilder = null)
+ where T : IStoreAccessor
+ {
+ ConfigureHttpClient((IScopedClientBuilder)clientBuilder, configureClient, configureClientBuilder);
+ return clientBuilder;
+ }
+
+ ///
+ /// Adds the and related services to the
+ /// and configures a
+ /// with the correct name
+ ///
+ ///
+ /// The
+ ///
+ ///
+ /// A delegate that is used to configure an .
+ ///
+ ///
+ /// A delegate that is used to additionally configure the
+ /// with a
+ ///
+ public static IScopedClientBuilder ConfigureHttpClient(
+ this IScopedClientBuilder clientBuilder,
+ Action configureClient,
+ Action? configureClientBuilder = null)
+ where T : IStoreAccessor
{
if (clientBuilder == null)
{
@@ -68,7 +118,7 @@ public static IClientBuilder ConfigureHttpClient(
/// with the correct name
///
///
- /// The
+ /// The
///
///
/// A delegate that is used to configure an .
@@ -77,8 +127,8 @@ public static IClientBuilder ConfigureHttpClient(
/// A delegate that is used to additionally configure the
/// with a
///
- public static IClientBuilder ConfigureHttpClient(
- this IClientBuilder clientBuilder,
+ public static IScopedClientBuilder ConfigureHttpClient(
+ this IScopedClientBuilder clientBuilder,
Action configureClient,
Action? configureClientBuilder = null)
where T : IStoreAccessor
diff --git a/src/StrawberryShake/Client/src/Transport.WebSockets/DependencyInjection/WebSocketClientBuilderExtensions.cs b/src/StrawberryShake/Client/src/Transport.WebSockets/DependencyInjection/WebSocketClientBuilderExtensions.cs
index 569bbc25845..b37b51703c5 100644
--- a/src/StrawberryShake/Client/src/Transport.WebSockets/DependencyInjection/WebSocketClientBuilderExtensions.cs
+++ b/src/StrawberryShake/Client/src/Transport.WebSockets/DependencyInjection/WebSocketClientBuilderExtensions.cs
@@ -29,6 +29,58 @@ public static IClientBuilder ConfigureWebSocketClient(
Action configureClient,
Action? configureClientBuilder = null)
where T : IStoreAccessor
+ {
+ ConfigureWebSocketClient((IScopedClientBuilder)clientBuilder, configureClient, configureClientBuilder);
+
+ return clientBuilder;
+ }
+
+ ///
+ /// Adds the and related services to the
+ /// and configures a
+ /// with the correct name
+ ///
+ ///
+ /// The
+ ///
+ ///
+ /// A delegate that is used to configure an .
+ ///
+ ///
+ /// A delegate that is used to additionally configure the
+ /// with a
+ ///
+ public static IClientBuilder ConfigureWebSocketClient(
+ this IClientBuilder clientBuilder,
+ Action configureClient,
+ Action? configureClientBuilder = null)
+ where T : IStoreAccessor
+ {
+ ConfigureWebSocketClient((IScopedClientBuilder)clientBuilder, configureClient, configureClientBuilder);
+
+ return clientBuilder;
+ }
+
+ ///
+ /// Adds the and related services to the
+ /// and configures a
+ /// with the correct name
+ ///
+ ///
+ /// The
+ ///
+ ///
+ /// A delegate that is used to configure an .
+ ///
+ ///
+ /// A delegate that is used to additionally configure the
+ /// with a
+ ///
+ public static IScopedClientBuilder ConfigureWebSocketClient(
+ this IScopedClientBuilder clientBuilder,
+ Action configureClient,
+ Action? configureClientBuilder = null)
+ where T : IStoreAccessor
{
if (clientBuilder == null)
{
@@ -54,7 +106,7 @@ public static IClientBuilder ConfigureWebSocketClient(
/// with the correct name
///
///
- /// The
+ /// The
///
///
/// A delegate that is used to configure an .
@@ -63,8 +115,8 @@ public static IClientBuilder ConfigureWebSocketClient(
/// A delegate that is used to additionally configure the
/// with a
///
- public static IClientBuilder ConfigureWebSocketClient(
- this IClientBuilder clientBuilder,
+ public static IScopedClientBuilder ConfigureWebSocketClient(
+ this IScopedClientBuilder clientBuilder,
Action configureClient,
Action? configureClientBuilder = null)
where T : IStoreAccessor
diff --git a/src/StrawberryShake/CodeGeneration/src/CodeGeneration.CSharp/Extensions/MethodBuilderExtensions.cs b/src/StrawberryShake/CodeGeneration/src/CodeGeneration.CSharp/Extensions/MethodBuilderExtensions.cs
index 2d247d9edd2..20a6cd36b13 100644
--- a/src/StrawberryShake/CodeGeneration/src/CodeGeneration.CSharp/Extensions/MethodBuilderExtensions.cs
+++ b/src/StrawberryShake/CodeGeneration/src/CodeGeneration.CSharp/Extensions/MethodBuilderExtensions.cs
@@ -56,4 +56,17 @@ public static CodeBlockBuilder AddBody(this MethodBuilder method)
method.AddCode(code);
return code;
}
+
+ public static MethodBuilder If(
+ this MethodBuilder builder,
+ bool condition,
+ Action configure)
+ {
+ if (condition)
+ {
+ configure(builder);
+ }
+
+ return builder;
+ }
}
diff --git a/src/StrawberryShake/CodeGeneration/src/CodeGeneration.CSharp/Generators/DependencyInjectionGenerator.cs b/src/StrawberryShake/CodeGeneration/src/CodeGeneration.CSharp/Generators/DependencyInjectionGenerator.cs
index 25f2ba47ff6..030859019bb 100644
--- a/src/StrawberryShake/CodeGeneration/src/CodeGeneration.CSharp/Generators/DependencyInjectionGenerator.cs
+++ b/src/StrawberryShake/CodeGeneration/src/CodeGeneration.CSharp/Generators/DependencyInjectionGenerator.cs
@@ -14,6 +14,7 @@ public class DependencyInjectionGenerator : CodeGenerator x.SetThis().SetType(IServiceCollection))
.AddParameter(
_strategy,
x => x.SetType(ExecutionStrategy)
.SetDefault(ExecutionStrategy + "." + "NetworkOnly"))
- .AddCode(GenerateMethodBody(settings, descriptor));
+ .If(isScoped, builder => builder
+ .AddParameter(
+ _configureClientServices,
+ x => x.SetType(TypeNames.Action.WithGeneric(IServiceCollection).MakeNullable()).SetDefault("null")))
+ .AddCode(GenerateMethodBody(settings, descriptor, isScoped));
if (descriptor.TransportProfiles.Count > 1)
{
@@ -90,15 +118,6 @@ protected override void Generate(
.SetDefault(CreateProfileEnumReference(descriptor) + "." +
descriptor.TransportProfiles[0].Name);
}
-
- foreach (var profile in descriptor.TransportProfiles)
- {
- GenerateClientForProfile(settings, factory, descriptor, profile);
- }
-
- factory.AddClass(_clientServiceProvider);
-
- factory.Build(writer);
}
private static void GenerateClientForProfile(
@@ -122,10 +141,31 @@ private static void GenerateClientForProfile(
}
private static ICode GenerateClientServiceProviderFactory(
- DependencyInjectionDescriptor descriptor)
+ DependencyInjectionDescriptor descriptor,
+ bool isScoped)
{
var codeBuilder = CodeBlockBuilder.New();
+ if (isScoped)
+ {
+ codeBuilder
+ .AddCode(AssignmentBuilder
+ .New()
+ .SetLeftHandSide($"var {_serviceCollection}")
+ .SetRightHandSide(MethodCallBuilder
+ .Inline()
+ .SetNew()
+ .SetMethodName(ServiceCollection)));
+ }
+
+ var callConfigureClientServices = IfBuilder
+ .New()
+ .SetCondition($"{_configureClientServices} is not null")
+ .AddCode(MethodCallBuilder
+ .New()
+ .SetMethodName(_configureClientServices)
+ .AddArgument(_serviceCollection));
+
if (descriptor.TransportProfiles.Count == 1)
{
return codeBuilder
@@ -137,6 +177,7 @@ private static ICode GenerateClientServiceProviderFactory(
.AddArgument(_serviceCollection)
.AddArgument(_strategy))
.AddEmptyLine()
+ .If(isScoped, x => x.AddCode(callConfigureClientServices))
.AddCode(MethodCallBuilder
.New()
.SetReturn()
@@ -175,6 +216,7 @@ private static ICode GenerateClientServiceProviderFactory(
return codeBuilder
.AddCode(ifProfile)
.AddEmptyLine()
+ .If(isScoped, x => x.AddCode(callConfigureClientServices))
.AddCode(MethodCallBuilder
.New()
.SetReturn()
@@ -195,47 +237,56 @@ private static string CreateProfileEnumReference(DependencyInjectionDescriptor d
private static ICode GenerateMethodBody(
CSharpSyntaxGeneratorSettings settings,
- DependencyInjectionDescriptor descriptor) =>
+ DependencyInjectionDescriptor descriptor,
+ bool isScoped) =>
CodeBlockBuilder
.New()
- .AddCode(
- AssignmentBuilder
+ .If(!isScoped,
+ builder => builder
+ .AddCode(AssignmentBuilder
.New()
.SetLeftHandSide($"var {_serviceCollection}")
.SetRightHandSide(MethodCallBuilder
.Inline()
.SetNew()
- .SetMethodName(ServiceCollection)))
+ .SetMethodName(ServiceCollection))))
.AddMethodCall(x => x
- .SetMethodName(AddSingleton)
+ .SetMethodName(isScoped
+ ? AddScoped
+ : AddSingleton)
.AddArgument(_services)
.AddArgument(LambdaBuilder
.New()
.SetBlock(true)
.AddArgument(_sp)
- .SetCode(GenerateClientServiceProviderFactory(descriptor))))
+ .SetCode(GenerateClientServiceProviderFactory(descriptor, isScoped))))
.AddEmptyLine()
- .AddCode(RegisterStoreAccessor(settings, descriptor.StoreAccessor))
+ .AddCode(RegisterStoreAccessor(settings, descriptor.StoreAccessor, isScoped))
.AddEmptyLine()
.ForEach(
descriptor.Operations,
(builder, operation) =>
builder.AddCode(ForwardSingletonToClientServiceProvider(
- operation.RuntimeType.ToString())))
+ operation.RuntimeType.ToString(),
+ isScoped)))
.AddEmptyLine()
.AddCode(ForwardSingletonToClientServiceProvider(
- descriptor.ClientDescriptor.RuntimeType.ToString()))
+ descriptor.ClientDescriptor.RuntimeType.ToString(),
+ isScoped))
.AddCode(ForwardSingletonToClientServiceProvider(
- descriptor.ClientDescriptor.InterfaceType.ToString()))
+ descriptor.ClientDescriptor.InterfaceType.ToString(),
+ isScoped))
.AddEmptyLine()
.AddMethodCall(x => x
.SetReturn()
.SetNew()
.SetMethodName(
- ClientBuilder.WithGeneric(descriptor.StoreAccessor.RuntimeType))
+ isScoped
+ ? ScopedClientBuilder.WithGeneric(descriptor.StoreAccessor.RuntimeType)
+ : ClientBuilder.WithGeneric(descriptor.StoreAccessor.RuntimeType))
.AddArgument(descriptor.Name.AsStringToken())
.AddArgument(_services)
- .AddArgument(_serviceCollection));
+ .If(!isScoped, builder => builder.AddArgument(_serviceCollection)));
private static ICode RegisterSerializerResolver() =>
MethodCallBuilder
@@ -274,13 +325,16 @@ private static ICode RegisterSerializerResolver() =>
private static ICode RegisterStoreAccessor(
CSharpSyntaxGeneratorSettings settings,
- StoreAccessorDescriptor storeAccessor)
+ StoreAccessorDescriptor storeAccessor,
+ bool isScoped)
{
if (settings.IsStoreDisabled())
{
return MethodCallBuilder
.New()
- .SetMethodName(AddSingleton)
+ .SetMethodName(isScoped
+ ? AddScoped
+ : AddSingleton)
.AddArgument(_services)
.AddArgument(LambdaBuilder
.New()
@@ -293,7 +347,9 @@ private static ICode RegisterStoreAccessor(
return MethodCallBuilder
.New()
- .SetMethodName(AddSingleton)
+ .SetMethodName(isScoped
+ ? AddScoped
+ : AddSingleton)
.AddArgument(_services)
.AddArgument(LambdaBuilder
.New()
@@ -358,10 +414,12 @@ private static ICode RegisterStoreAccessor(
IOperationResultDataFactory)))));
}
- private static ICode ForwardSingletonToClientServiceProvider(string generic) =>
+ private static ICode ForwardSingletonToClientServiceProvider(string generic, bool isScoped) =>
MethodCallBuilder
.New()
- .SetMethodName(AddSingleton)
+ .SetMethodName(isScoped
+ ? AddScoped
+ : AddSingleton)
.AddArgument(_services)
.AddArgument(LambdaBuilder
.New()
diff --git a/src/StrawberryShake/CodeGeneration/src/CodeGeneration/TypeNames.cs b/src/StrawberryShake/CodeGeneration/src/CodeGeneration/TypeNames.cs
index 87afb47b631..aae414acd20 100644
--- a/src/StrawberryShake/CodeGeneration/src/CodeGeneration/TypeNames.cs
+++ b/src/StrawberryShake/CodeGeneration/src/CodeGeneration/TypeNames.cs
@@ -180,6 +180,7 @@ public static class TypeNames
public const string DateTimeOffset = "global::System.DateTimeOffset";
public const string OrdinalStringComparison = "global::System.StringComparison.Ordinal";
public const string Func = "global::System.Func";
+ public const string Action = "global::System.Action";
public const string Task = "global::System.Threading.Tasks.Task";
public const string IOperationObservable = "global::System.IObservable";
public const string CancellationToken = "global::System.Threading.CancellationToken";
@@ -208,6 +209,10 @@ public static class TypeNames
GlobalDependencyInjectionNamespace +
"ServiceCollectionServiceExtensions.AddSingleton";
+ public const string AddScoped =
+ GlobalDependencyInjectionNamespace +
+ "ServiceCollectionServiceExtensions.AddScoped";
+
public const string BuildServiceProvider =
GlobalDependencyInjectionNamespace +
"ServiceCollectionContainerBuilderExtensions.BuildServiceProvider";
@@ -293,7 +298,9 @@ public static class TypeNames
StrawberryShakeNamespace + "Serialization.UploadSerializer";
public const string IClientBuilder = StrawberryShakeNamespace + "IClientBuilder";
+ public const string IScopedClientBuilder = StrawberryShakeNamespace + "IScopedClientBuilder";
public const string ClientBuilder = StrawberryShakeNamespace + "ClientBuilder";
+ public const string ScopedClientBuilder = StrawberryShakeNamespace + "ScopedClientBuilder";
public const string ArrayWriter = StrawberryShakeNamespace + "Internal.ArrayWriter";
}
diff --git a/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/AnyScalarDefaultSerializationTest.Client.cs b/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/AnyScalarDefaultSerializationTest.Client.cs
index 07bbb65ca4a..d91b6d91371 100644
--- a/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/AnyScalarDefaultSerializationTest.Client.cs
+++ b/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/AnyScalarDefaultSerializationTest.Client.cs
@@ -36,6 +36,26 @@ public static partial class AnyScalarDefaultSerializationClientServiceCollection
return new global::StrawberryShake.ClientBuilder("AnyScalarDefaultSerializationClient", services, serviceCollection);
}
+ public static global::StrawberryShake.IScopedClientBuilder AddScopedAnyScalarDefaultSerializationClient(this global::Microsoft.Extensions.DependencyInjection.IServiceCollection services, global::StrawberryShake.ExecutionStrategy strategy = global::StrawberryShake.ExecutionStrategy.NetworkOnly, global::System.Action? configureClientServices = null)
+ {
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp =>
+ {
+ var serviceCollection = new global::Microsoft.Extensions.DependencyInjection.ServiceCollection();
+ ConfigureClientDefault(sp, serviceCollection, strategy);
+ if (configureClientServices is not null)
+ {
+ configureClientServices(serviceCollection);
+ }
+
+ return new ClientServiceProvider(global::Microsoft.Extensions.DependencyInjection.ServiceCollectionContainerBuilderExtensions.BuildServiceProvider(serviceCollection));
+ });
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => new global::StrawberryShake.CodeGeneration.CSharp.Integration.AnyScalarDefaultSerialization.State.AnyScalarDefaultSerializationClientStoreAccessor(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp))));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ return new global::StrawberryShake.ScopedClientBuilder("AnyScalarDefaultSerializationClient", services);
+ }
+
private static global::Microsoft.Extensions.DependencyInjection.IServiceCollection ConfigureClientDefault(global::System.IServiceProvider parentServices, global::Microsoft.Extensions.DependencyInjection.ServiceCollection services, global::StrawberryShake.ExecutionStrategy strategy = global::StrawberryShake.ExecutionStrategy.NetworkOnly)
{
global::Microsoft.Extensions.DependencyInjection.Extensions.ServiceCollectionDescriptorExtensions.TryAddSingleton(services);
diff --git a/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/EntityIdOrDataTest.Client.cs b/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/EntityIdOrDataTest.Client.cs
index 9b9dd5cff68..7b688141f71 100644
--- a/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/EntityIdOrDataTest.Client.cs
+++ b/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/EntityIdOrDataTest.Client.cs
@@ -36,6 +36,26 @@ public static partial class EntityIdOrDataClientServiceCollectionExtensions
return new global::StrawberryShake.ClientBuilder("EntityIdOrDataClient", services, serviceCollection);
}
+ public static global::StrawberryShake.IScopedClientBuilder AddScopedEntityIdOrDataClient(this global::Microsoft.Extensions.DependencyInjection.IServiceCollection services, global::StrawberryShake.ExecutionStrategy strategy = global::StrawberryShake.ExecutionStrategy.NetworkOnly, global::System.Action? configureClientServices = null)
+ {
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp =>
+ {
+ var serviceCollection = new global::Microsoft.Extensions.DependencyInjection.ServiceCollection();
+ ConfigureClientDefault(sp, serviceCollection, strategy);
+ if (configureClientServices is not null)
+ {
+ configureClientServices(serviceCollection);
+ }
+
+ return new ClientServiceProvider(global::Microsoft.Extensions.DependencyInjection.ServiceCollectionContainerBuilderExtensions.BuildServiceProvider(serviceCollection));
+ });
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => new global::StrawberryShake.CodeGeneration.CSharp.Integration.EntityIdOrData.State.EntityIdOrDataClientStoreAccessor(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp))));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ return new global::StrawberryShake.ScopedClientBuilder("EntityIdOrDataClient", services);
+ }
+
private static global::Microsoft.Extensions.DependencyInjection.IServiceCollection ConfigureClientDefault(global::System.IServiceProvider parentServices, global::Microsoft.Extensions.DependencyInjection.ServiceCollection services, global::StrawberryShake.ExecutionStrategy strategy = global::StrawberryShake.ExecutionStrategy.NetworkOnly)
{
global::Microsoft.Extensions.DependencyInjection.Extensions.ServiceCollectionDescriptorExtensions.TryAddSingleton(services);
diff --git a/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/MultiProfileTest.Client.cs b/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/MultiProfileTest.Client.cs
index 22e53efd4ee..e5dbc818a39 100644
--- a/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/MultiProfileTest.Client.cs
+++ b/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/MultiProfileTest.Client.cs
@@ -46,6 +46,36 @@ public static partial class MultiProfileClientServiceCollectionExtensions
return new global::StrawberryShake.ClientBuilder("MultiProfileClient", services, serviceCollection);
}
+ public static global::StrawberryShake.IScopedClientBuilder AddScopedMultiProfileClient(this global::Microsoft.Extensions.DependencyInjection.IServiceCollection services, global::StrawberryShake.ExecutionStrategy strategy = global::StrawberryShake.ExecutionStrategy.NetworkOnly, global::System.Action? configureClientServices = null, global::StrawberryShake.CodeGeneration.CSharp.Integration.MultiProfile.MultiProfileClientProfileKind profile = global::StrawberryShake.CodeGeneration.CSharp.Integration.MultiProfile.MultiProfileClientProfileKind.InMemory)
+ {
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp =>
+ {
+ var serviceCollection = new global::Microsoft.Extensions.DependencyInjection.ServiceCollection();
+ if (profile == global::StrawberryShake.CodeGeneration.CSharp.Integration.MultiProfile.MultiProfileClientProfileKind.InMemory)
+ {
+ ConfigureClientInMemory(sp, serviceCollection, strategy);
+ }
+ else if (profile == global::StrawberryShake.CodeGeneration.CSharp.Integration.MultiProfile.MultiProfileClientProfileKind.Default)
+ {
+ ConfigureClientDefault(sp, serviceCollection, strategy);
+ }
+
+ if (configureClientServices is not null)
+ {
+ configureClientServices(serviceCollection);
+ }
+
+ return new ClientServiceProvider(global::Microsoft.Extensions.DependencyInjection.ServiceCollectionContainerBuilderExtensions.BuildServiceProvider(serviceCollection));
+ });
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => new global::StrawberryShake.CodeGeneration.CSharp.Integration.MultiProfile.State.MultiProfileClientStoreAccessor(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp))));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ return new global::StrawberryShake.ScopedClientBuilder("MultiProfileClient", services);
+ }
+
private static global::Microsoft.Extensions.DependencyInjection.IServiceCollection ConfigureClientInMemory(global::System.IServiceProvider parentServices, global::Microsoft.Extensions.DependencyInjection.ServiceCollection services, global::StrawberryShake.ExecutionStrategy strategy = global::StrawberryShake.ExecutionStrategy.NetworkOnly)
{
global::Microsoft.Extensions.DependencyInjection.Extensions.ServiceCollectionDescriptorExtensions.TryAddSingleton(services);
diff --git a/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsGetFriendsDeferInListTest.Client.cs b/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsGetFriendsDeferInListTest.Client.cs
index dcb259cd6f6..eb363ccea10 100644
--- a/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsGetFriendsDeferInListTest.Client.cs
+++ b/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsGetFriendsDeferInListTest.Client.cs
@@ -36,6 +36,26 @@ public static partial class StarWarsGetFriendsDeferInListClientServiceCollection
return new global::StrawberryShake.ClientBuilder("StarWarsGetFriendsDeferInListClient", services, serviceCollection);
}
+ public static global::StrawberryShake.IScopedClientBuilder AddScopedStarWarsGetFriendsDeferInListClient(this global::Microsoft.Extensions.DependencyInjection.IServiceCollection services, global::StrawberryShake.ExecutionStrategy strategy = global::StrawberryShake.ExecutionStrategy.NetworkOnly, global::System.Action? configureClientServices = null)
+ {
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp =>
+ {
+ var serviceCollection = new global::Microsoft.Extensions.DependencyInjection.ServiceCollection();
+ ConfigureClientDefault(sp, serviceCollection, strategy);
+ if (configureClientServices is not null)
+ {
+ configureClientServices(serviceCollection);
+ }
+
+ return new ClientServiceProvider(global::Microsoft.Extensions.DependencyInjection.ServiceCollectionContainerBuilderExtensions.BuildServiceProvider(serviceCollection));
+ });
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => new global::StrawberryShake.CodeGeneration.CSharp.Integration.StarWarsGetFriendsDeferInList.State.StarWarsGetFriendsDeferInListClientStoreAccessor(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp))));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ return new global::StrawberryShake.ScopedClientBuilder("StarWarsGetFriendsDeferInListClient", services);
+ }
+
private static global::Microsoft.Extensions.DependencyInjection.IServiceCollection ConfigureClientDefault(global::System.IServiceProvider parentServices, global::Microsoft.Extensions.DependencyInjection.ServiceCollection services, global::StrawberryShake.ExecutionStrategy strategy = global::StrawberryShake.ExecutionStrategy.NetworkOnly)
{
global::Microsoft.Extensions.DependencyInjection.Extensions.ServiceCollectionDescriptorExtensions.TryAddSingleton(services);
diff --git a/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsGetFriendsDeferredTest.Client.cs b/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsGetFriendsDeferredTest.Client.cs
index d57c4b0f98c..02f3e6d3190 100644
--- a/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsGetFriendsDeferredTest.Client.cs
+++ b/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsGetFriendsDeferredTest.Client.cs
@@ -36,6 +36,26 @@ public static partial class StarWarsGetFriendsDeferredClientServiceCollectionExt
return new global::StrawberryShake.ClientBuilder("StarWarsGetFriendsDeferredClient", services, serviceCollection);
}
+ public static global::StrawberryShake.IScopedClientBuilder AddScopedStarWarsGetFriendsDeferredClient(this global::Microsoft.Extensions.DependencyInjection.IServiceCollection services, global::StrawberryShake.ExecutionStrategy strategy = global::StrawberryShake.ExecutionStrategy.NetworkOnly, global::System.Action? configureClientServices = null)
+ {
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp =>
+ {
+ var serviceCollection = new global::Microsoft.Extensions.DependencyInjection.ServiceCollection();
+ ConfigureClientDefault(sp, serviceCollection, strategy);
+ if (configureClientServices is not null)
+ {
+ configureClientServices(serviceCollection);
+ }
+
+ return new ClientServiceProvider(global::Microsoft.Extensions.DependencyInjection.ServiceCollectionContainerBuilderExtensions.BuildServiceProvider(serviceCollection));
+ });
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => new global::StrawberryShake.CodeGeneration.CSharp.Integration.StarWarsGetFriendsDeferred.State.StarWarsGetFriendsDeferredClientStoreAccessor(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp))));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ return new global::StrawberryShake.ScopedClientBuilder("StarWarsGetFriendsDeferredClient", services);
+ }
+
private static global::Microsoft.Extensions.DependencyInjection.IServiceCollection ConfigureClientDefault(global::System.IServiceProvider parentServices, global::Microsoft.Extensions.DependencyInjection.ServiceCollection services, global::StrawberryShake.ExecutionStrategy strategy = global::StrawberryShake.ExecutionStrategy.NetworkOnly)
{
global::Microsoft.Extensions.DependencyInjection.Extensions.ServiceCollectionDescriptorExtensions.TryAddSingleton(services);
diff --git a/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsGetFriendsNoStoreTest.Client.cs b/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsGetFriendsNoStoreTest.Client.cs
index 1827aa8f867..7cee04540a5 100644
--- a/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsGetFriendsNoStoreTest.Client.cs
+++ b/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsGetFriendsNoStoreTest.Client.cs
@@ -36,6 +36,26 @@ public static partial class StarWarsGetFriendsNoStoreClientServiceCollectionExte
return new global::StrawberryShake.ClientBuilder("StarWarsGetFriendsNoStoreClient", services, serviceCollection);
}
+ public static global::StrawberryShake.IScopedClientBuilder AddScopedStarWarsGetFriendsNoStoreClient(this global::Microsoft.Extensions.DependencyInjection.IServiceCollection services, global::StrawberryShake.ExecutionStrategy strategy = global::StrawberryShake.ExecutionStrategy.NetworkOnly, global::System.Action? configureClientServices = null)
+ {
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp =>
+ {
+ var serviceCollection = new global::Microsoft.Extensions.DependencyInjection.ServiceCollection();
+ ConfigureClientDefault(sp, serviceCollection, strategy);
+ if (configureClientServices is not null)
+ {
+ configureClientServices(serviceCollection);
+ }
+
+ return new ClientServiceProvider(global::Microsoft.Extensions.DependencyInjection.ServiceCollectionContainerBuilderExtensions.BuildServiceProvider(serviceCollection));
+ });
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => new global::StrawberryShake.CodeGeneration.CSharp.Integration.StarWarsGetFriendsNoStore.State.StarWarsGetFriendsNoStoreClientStoreAccessor());
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ return new global::StrawberryShake.ScopedClientBuilder("StarWarsGetFriendsNoStoreClient", services);
+ }
+
private static global::Microsoft.Extensions.DependencyInjection.IServiceCollection ConfigureClientDefault(global::System.IServiceProvider parentServices, global::Microsoft.Extensions.DependencyInjection.ServiceCollection services, global::StrawberryShake.ExecutionStrategy strategy = global::StrawberryShake.ExecutionStrategy.NetworkOnly)
{
global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddSingleton(services, sp =>
diff --git a/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsGetFriendsTest.Client.cs b/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsGetFriendsTest.Client.cs
index 69738c9eb3d..042bc0318cf 100644
--- a/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsGetFriendsTest.Client.cs
+++ b/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsGetFriendsTest.Client.cs
@@ -36,6 +36,26 @@ public static partial class StarWarsGetFriendsClientServiceCollectionExtensions
return new global::StrawberryShake.ClientBuilder("StarWarsGetFriendsClient", services, serviceCollection);
}
+ public static global::StrawberryShake.IScopedClientBuilder AddScopedStarWarsGetFriendsClient(this global::Microsoft.Extensions.DependencyInjection.IServiceCollection services, global::StrawberryShake.ExecutionStrategy strategy = global::StrawberryShake.ExecutionStrategy.NetworkOnly, global::System.Action? configureClientServices = null)
+ {
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp =>
+ {
+ var serviceCollection = new global::Microsoft.Extensions.DependencyInjection.ServiceCollection();
+ ConfigureClientDefault(sp, serviceCollection, strategy);
+ if (configureClientServices is not null)
+ {
+ configureClientServices(serviceCollection);
+ }
+
+ return new ClientServiceProvider(global::Microsoft.Extensions.DependencyInjection.ServiceCollectionContainerBuilderExtensions.BuildServiceProvider(serviceCollection));
+ });
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => new global::StrawberryShake.CodeGeneration.CSharp.Integration.StarWarsGetFriends.State.StarWarsGetFriendsClientStoreAccessor(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp))));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ return new global::StrawberryShake.ScopedClientBuilder("StarWarsGetFriendsClient", services);
+ }
+
private static global::Microsoft.Extensions.DependencyInjection.IServiceCollection ConfigureClientDefault(global::System.IServiceProvider parentServices, global::Microsoft.Extensions.DependencyInjection.ServiceCollection services, global::StrawberryShake.ExecutionStrategy strategy = global::StrawberryShake.ExecutionStrategy.NetworkOnly)
{
global::Microsoft.Extensions.DependencyInjection.Extensions.ServiceCollectionDescriptorExtensions.TryAddSingleton(services);
diff --git a/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsGetHeroTest.Client.cs b/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsGetHeroTest.Client.cs
index ef0deaf393c..f2cf9f598bb 100644
--- a/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsGetHeroTest.Client.cs
+++ b/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsGetHeroTest.Client.cs
@@ -36,6 +36,26 @@ public static partial class StarWarsGetHeroClientServiceCollectionExtensions
return new global::StrawberryShake.ClientBuilder("StarWarsGetHeroClient", services, serviceCollection);
}
+ public static global::StrawberryShake.IScopedClientBuilder AddScopedStarWarsGetHeroClient(this global::Microsoft.Extensions.DependencyInjection.IServiceCollection services, global::StrawberryShake.ExecutionStrategy strategy = global::StrawberryShake.ExecutionStrategy.NetworkOnly, global::System.Action? configureClientServices = null)
+ {
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp =>
+ {
+ var serviceCollection = new global::Microsoft.Extensions.DependencyInjection.ServiceCollection();
+ ConfigureClientDefault(sp, serviceCollection, strategy);
+ if (configureClientServices is not null)
+ {
+ configureClientServices(serviceCollection);
+ }
+
+ return new ClientServiceProvider(global::Microsoft.Extensions.DependencyInjection.ServiceCollectionContainerBuilderExtensions.BuildServiceProvider(serviceCollection));
+ });
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => new global::StrawberryShake.CodeGeneration.CSharp.Integration.StarWarsGetHero.State.StarWarsGetHeroClientStoreAccessor(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp))));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ return new global::StrawberryShake.ScopedClientBuilder("StarWarsGetHeroClient", services);
+ }
+
private static global::Microsoft.Extensions.DependencyInjection.IServiceCollection ConfigureClientDefault(global::System.IServiceProvider parentServices, global::Microsoft.Extensions.DependencyInjection.ServiceCollection services, global::StrawberryShake.ExecutionStrategy strategy = global::StrawberryShake.ExecutionStrategy.NetworkOnly)
{
global::Microsoft.Extensions.DependencyInjection.Extensions.ServiceCollectionDescriptorExtensions.TryAddSingleton(services);
diff --git a/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsGetHeroTraitsTest.Client.cs b/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsGetHeroTraitsTest.Client.cs
index 9480da62373..b3435646d1c 100644
--- a/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsGetHeroTraitsTest.Client.cs
+++ b/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsGetHeroTraitsTest.Client.cs
@@ -36,6 +36,26 @@ public static partial class StarWarsGetHeroTraitsClientServiceCollectionExtensio
return new global::StrawberryShake.ClientBuilder("StarWarsGetHeroTraitsClient", services, serviceCollection);
}
+ public static global::StrawberryShake.IScopedClientBuilder AddScopedStarWarsGetHeroTraitsClient(this global::Microsoft.Extensions.DependencyInjection.IServiceCollection services, global::StrawberryShake.ExecutionStrategy strategy = global::StrawberryShake.ExecutionStrategy.NetworkOnly, global::System.Action? configureClientServices = null)
+ {
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp =>
+ {
+ var serviceCollection = new global::Microsoft.Extensions.DependencyInjection.ServiceCollection();
+ ConfigureClientDefault(sp, serviceCollection, strategy);
+ if (configureClientServices is not null)
+ {
+ configureClientServices(serviceCollection);
+ }
+
+ return new ClientServiceProvider(global::Microsoft.Extensions.DependencyInjection.ServiceCollectionContainerBuilderExtensions.BuildServiceProvider(serviceCollection));
+ });
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => new global::StrawberryShake.CodeGeneration.CSharp.Integration.StarWarsGetHeroTraits.State.StarWarsGetHeroTraitsClientStoreAccessor(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService>(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp))));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)));
+ return new global::StrawberryShake.ScopedClientBuilder("StarWarsGetHeroTraitsClient", services);
+ }
+
private static global::Microsoft.Extensions.DependencyInjection.IServiceCollection ConfigureClientDefault(global::System.IServiceProvider parentServices, global::Microsoft.Extensions.DependencyInjection.ServiceCollection services, global::StrawberryShake.ExecutionStrategy strategy = global::StrawberryShake.ExecutionStrategy.NetworkOnly)
{
global::Microsoft.Extensions.DependencyInjection.Extensions.ServiceCollectionDescriptorExtensions.TryAddSingleton(services);
diff --git a/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsIntrospectionTest.Client.cs b/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsIntrospectionTest.Client.cs
index e078cbea5e2..d20008e6009 100644
--- a/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsIntrospectionTest.Client.cs
+++ b/src/StrawberryShake/CodeGeneration/test/CodeGeneration.CSharp.Tests/Integration/StarWarsIntrospectionTest.Client.cs
@@ -36,6 +36,26 @@ public static partial class StarWarsIntrospectionClientServiceCollectionExtensio
return new global::StrawberryShake.ClientBuilder("StarWarsIntrospectionClient", services, serviceCollection);
}
+ public static global::StrawberryShake.IScopedClientBuilder AddScopedStarWarsIntrospectionClient(this global::Microsoft.Extensions.DependencyInjection.IServiceCollection services, global::StrawberryShake.ExecutionStrategy strategy = global::StrawberryShake.ExecutionStrategy.NetworkOnly, global::System.Action? configureClientServices = null)
+ {
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp =>
+ {
+ var serviceCollection = new global::Microsoft.Extensions.DependencyInjection.ServiceCollection();
+ ConfigureClientDefault(sp, serviceCollection, strategy);
+ if (configureClientServices is not null)
+ {
+ configureClientServices(serviceCollection);
+ }
+
+ return new ClientServiceProvider(global::Microsoft.Extensions.DependencyInjection.ServiceCollectionContainerBuilderExtensions.BuildServiceProvider(serviceCollection));
+ });
+ global::Microsoft.Extensions.DependencyInjection.ServiceCollectionServiceExtensions.AddScoped(services, sp => new global::StrawberryShake.CodeGeneration.CSharp.Integration.StarWarsIntrospection.State.StarWarsIntrospectionClientStoreAccessor(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(sp)), global::Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService