Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions src/Dapr.AI/Conversation/DaprConversationClientBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

using System.Diagnostics.CodeAnalysis;
using Dapr.Common;
using Dapr.Common.Http;
using Microsoft.Extensions.Configuration;
using Autogenerated = Dapr.Client.Autogen.Grpc.v1.Dapr;

Expand All @@ -23,7 +24,7 @@
/// </summary>
/// <param name="configuration">An optional <see cref="IConfiguration"/> to configure the client with.</param>
[Experimental("DAPR_CONVERSATION", UrlFormat = "https://docs.dapr.io/developing-applications/building-blocks/conversation/conversation-overview/")]
public sealed class DaprConversationClientBuilder(IConfiguration? configuration = null) : DaprGenericClientBuilder<DaprConversationClient>(configuration)
public sealed class DaprConversationClientBuilder(IDaprHttpClientFactory daprHttpClientFactory, IConfiguration? configuration = null) : DaprGenericClientBuilder<DaprConversationClient>(daprHttpClientFactory, configuration)

Check failure on line 27 in src/Dapr.AI/Conversation/DaprConversationClientBuilder.cs

View workflow job for this annotation

GitHub Actions / Build

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprConversationClientBuilder.DaprConversationClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)

Check failure on line 27 in src/Dapr.AI/Conversation/DaprConversationClientBuilder.cs

View workflow job for this annotation

GitHub Actions / Build

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprConversationClientBuilder.DaprConversationClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)

Check failure on line 27 in src/Dapr.AI/Conversation/DaprConversationClientBuilder.cs

View workflow job for this annotation

GitHub Actions / Test .NET 8.0

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprConversationClientBuilder.DaprConversationClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)

Check failure on line 27 in src/Dapr.AI/Conversation/DaprConversationClientBuilder.cs

View workflow job for this annotation

GitHub Actions / Test .NET 8.0

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprConversationClientBuilder.DaprConversationClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)

Check failure on line 27 in src/Dapr.AI/Conversation/DaprConversationClientBuilder.cs

View workflow job for this annotation

GitHub Actions / Test .NET 9.0

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprConversationClientBuilder.DaprConversationClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)

Check failure on line 27 in src/Dapr.AI/Conversation/DaprConversationClientBuilder.cs

View workflow job for this annotation

GitHub Actions / Test .NET 9.0

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprConversationClientBuilder.DaprConversationClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)

Check failure on line 27 in src/Dapr.AI/Conversation/DaprConversationClientBuilder.cs

View workflow job for this annotation

GitHub Actions / integration-test / Integration Tests (8.0)

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprConversationClientBuilder.DaprConversationClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)

Check failure on line 27 in src/Dapr.AI/Conversation/DaprConversationClientBuilder.cs

View workflow job for this annotation

GitHub Actions / integration-test / Integration Tests (8.0)

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprConversationClientBuilder.DaprConversationClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)

Check failure on line 27 in src/Dapr.AI/Conversation/DaprConversationClientBuilder.cs

View workflow job for this annotation

GitHub Actions / integration-test / Integration Tests (9.0)

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprConversationClientBuilder.DaprConversationClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)

Check failure on line 27 in src/Dapr.AI/Conversation/DaprConversationClientBuilder.cs

View workflow job for this annotation

GitHub Actions / integration-test / Integration Tests (9.0)

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprConversationClientBuilder.DaprConversationClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)
{
/// <summary>
/// Builds the client instance from the properties of the builder.
Expand All @@ -35,7 +36,7 @@
[Experimental("DAPR_CONVERSATION", UrlFormat = "https://docs.dapr.io/developing-applications/building-blocks/conversation/conversation-overview/")]
public override DaprConversationClient Build()
{
var daprClientDependencies = BuildDaprClientDependencies(typeof(DaprConversationClient).Assembly);
var daprClientDependencies = BuildDaprClientDependencies();
var client = new Autogenerated.DaprClient(daprClientDependencies.channel);
return new DaprConversationGrpcClient(client, daprClientDependencies.httpClient, daprClientDependencies.daprApiToken);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,16 @@ public static IDaprAiConversationBuilder AddDaprConversationClient(
this IServiceCollection services,
Action<IServiceProvider, DaprConversationClientBuilder>? configure = null,
ServiceLifetime lifetime = ServiceLifetime.Singleton) => services
.AddDaprClient<DaprConversationClient, DaprConversationGrpcClient, DaprAiConversationBuilder, DaprConversationClientBuilder>(configure, lifetime);
.AddDaprClient<DaprConversationClient, DaprConversationGrpcClient, DaprAiConversationBuilder, DaprConversationClientBuilder>(configure, null, lifetime);

/// <summary>
/// Registers the necessary functionality for the Dapr AI Conversation functionality.
/// </summary>
[Experimental("DAPR_CONVERSATION", UrlFormat = "https://docs.dapr.io/developing-applications/building-blocks/conversation/conversation-overview/")]
public static IDaprAiConversationBuilder AddDaprConversationClient(
this IServiceCollection services,
Action<IServiceProvider, DaprConversationClientBuilder>? configure = null,
Action<IServiceProvider, HttpClient>? configureHttpClient = null,
ServiceLifetime lifetime = ServiceLifetime.Singleton) => services
.AddDaprClient<DaprConversationClient, DaprConversationGrpcClient, DaprAiConversationBuilder, DaprConversationClientBuilder>(configure, configureHttpClient, lifetime);
}
71 changes: 13 additions & 58 deletions src/Dapr.Common/DaprGenericClientBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
// limitations under the License.
// ------------------------------------------------------------------------

using System.Reflection;
using System.Text.Json;
using Dapr.Common.Http;
using Grpc.Net.Client;
using Microsoft.Extensions.Configuration;

Expand All @@ -23,11 +23,16 @@ namespace Dapr.Common;
/// </summary>
public abstract class DaprGenericClientBuilder<TClientBuilder> where TClientBuilder : class, IDaprClient
{
private readonly IDaprHttpClientFactory daprHttpClientFactory;

/// <summary>
/// Initializes a new instance of the <see cref="DaprGenericClientBuilder{TClientBuilder}"/> class.
/// </summary>
protected DaprGenericClientBuilder(IConfiguration? configuration = null)
protected DaprGenericClientBuilder(IDaprHttpClientFactory daprHttpClientFactory, IConfiguration? configuration = null)
{
ArgumentNullException.ThrowIfNull(daprHttpClientFactory);
this.daprHttpClientFactory = daprHttpClientFactory;

this.GrpcEndpoint = DaprDefaults.GetDefaultGrpcEndpoint();
this.HttpEndpoint = DaprDefaults.GetDefaultHttpEndpoint();

Expand All @@ -52,11 +57,6 @@ protected DaprGenericClientBuilder(IConfiguration? configuration = null)
/// </summary>
internal string HttpEndpoint { get; private set; }

/// <summary>
/// Property exposed for testing purposes.
/// </summary>
internal Func<HttpClient>? HttpClientFactory { get; set; }

/// <summary>
/// Property exposed for testing purposes.
/// </summary>
Expand Down Expand Up @@ -94,27 +94,6 @@ public DaprGenericClientBuilder<TClientBuilder> UseHttpEndpoint(string httpEndpo
return this;
}

/// <summary>
/// Exposed internally for testing purposes.
/// </summary>
internal DaprGenericClientBuilder<TClientBuilder> UseHttpClientFactory(Func<HttpClient> factory)
{
this.HttpClientFactory = factory;
return this;
}

/// <summary>
/// Overrides the legacy mechanism for building an HttpClient and uses the new <see cref="IHttpClientFactory"/>
/// introduced in .NET Core 2.1.
/// </summary>
/// <param name="httpClientFactory">The factory used to create <see cref="HttpClient"/> instances.</param>
/// <returns></returns>
public DaprGenericClientBuilder<TClientBuilder> UseHttpClientFactory(IHttpClientFactory httpClientFactory)
{
this.HttpClientFactory = httpClientFactory.CreateClient;
return this;
}

/// <summary>
/// Overrides the gRPC endpoint used by the Dapr client for communicating with the Dapr runtime.
/// </summary>
Expand Down Expand Up @@ -184,9 +163,8 @@ public DaprGenericClientBuilder<TClientBuilder> UseTimeout(TimeSpan timeout)
/// Builds out the inner DaprClient that provides the core shape of the
/// runtime gRPC client used by the consuming package.
/// </summary>
/// <param name="assembly">The assembly the dependencies are being built for.</param>
/// <exception cref="InvalidOperationException"></exception>
protected internal (GrpcChannel channel, HttpClient httpClient, Uri httpEndpoint, string daprApiToken) BuildDaprClientDependencies(Assembly assembly)
protected internal (GrpcChannel channel, HttpClient httpClient, Uri httpEndpoint, string daprApiToken) BuildDaprClientDependencies()
{
var grpcEndpoint = new Uri(this.GrpcEndpoint);
if (grpcEndpoint.Scheme != "http" && grpcEndpoint.Scheme != "https")
Expand All @@ -207,40 +185,17 @@ protected internal (GrpcChannel channel, HttpClient httpClient, Uri httpEndpoint
}

//Configure the HTTP client
var httpClient = ConfigureHttpClient(assembly);
this.GrpcChannelOptions.HttpClient = httpClient;
var httpClient = daprHttpClientFactory.CreateClient();

var channel = GrpcChannel.ForAddress(this.GrpcEndpoint, this.GrpcChannelOptions);
return (channel, httpClient, httpEndpoint, this.DaprApiToken);
}

/// <summary>
/// Configures the HTTP client.
/// </summary>
/// <param name="assembly">The assembly the user agent is built from.</param>
/// <returns>The HTTP client to interact with the Dapr runtime with.</returns>
private HttpClient ConfigureHttpClient(Assembly assembly)
{
var httpClient = HttpClientFactory is not null ? HttpClientFactory() : new HttpClient();

//Set the timeout as necessary
//Update the timeout to use the one provided in this builder
if (this.Timeout > TimeSpan.Zero)
{
httpClient.Timeout = this.Timeout;
}
this.GrpcChannelOptions.HttpClient = httpClient;

//Set the user agent
var userAgent = DaprClientUtilities.GetUserAgent(assembly);
httpClient.DefaultRequestHeaders.Add("User-Agent", userAgent.ToString());

//Set the API token
var apiTokenHeader = DaprClientUtilities.GetDaprApiTokenHeader(this.DaprApiToken);
if (apiTokenHeader is not null)
{
httpClient.DefaultRequestHeaders.Add(apiTokenHeader.Value.Key, apiTokenHeader.Value.Value);
}

return httpClient;
var channel = GrpcChannel.ForAddress(this.GrpcEndpoint, this.GrpcChannelOptions);
return (channel, httpClient, httpEndpoint, this.DaprApiToken);
}

/// <summary>
Expand Down
42 changes: 38 additions & 4 deletions src/Dapr.Common/Extensions/DaprClientBuilderExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,10 @@
// ------------------------------------------------------------------------

using System.Reflection;
using Dapr.Common.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Http;
using Autogenerated = Dapr.Client.Autogen.Grpc.v1.Dapr;

namespace Dapr.Common.Extensions;
Expand All @@ -32,12 +34,14 @@ internal static class DaprClientBuilderExtensions
/// <typeparam name="TClientBuilder">The type of the static builder used to build the Dapr ot client.</typeparam>
/// <param name="services">The collection of services to which the Dapr client and associated services are being registered.</param>
/// <param name="configure">An optional method used to provide additional configurations to the client builder.</param>
/// <param name="configureHttpClient">An optional method used to configure the HttpClient used by Dapr.</param>
/// <param name="lifetime">The registered lifetime of the Dapr client.</param>
/// <returns>The collection of DI-registered services.</returns>
//internal static TBuilderInterface AddDaprClient<TBuilderInterface, TClient, TClientBuilder>(
internal static TServiceBuilder AddDaprClient<TClient, TConcreteClient, TServiceBuilder, TClientBuilder>(
this IServiceCollection services,
Action<IServiceProvider, TClientBuilder>? configure = null,
Action<IServiceProvider, HttpClient>? configureHttpClient = null,
ServiceLifetime lifetime = ServiceLifetime.Singleton)
where TClient : class, IDaprClient
where TConcreteClient : TClient
Expand All @@ -61,16 +65,46 @@ internal static TServiceBuilder AddDaprClient<TClient, TConcreteClient, TService
}

services.AddHttpClient();

services.AddSingleton<IDaprHttpClientFactory>(serviceProvider =>
{
var httpClientFactory = serviceProvider.GetRequiredService<IHttpClientFactory>();
var configuration = serviceProvider.GetService<IConfiguration>();

return new DefaultDaprHttpClientFactory(httpClientFactory, client =>
{
// Configure the HTTP client
if (configuration is not null)
{
//Get the API token header
var daprApiToken = DaprDefaults.GetDefaultDaprApiToken(configuration);
var apiTokenHeader = DaprClientUtilities.GetDaprApiTokenHeader(daprApiToken);
if (apiTokenHeader is not null)
{
client.DefaultRequestHeaders.Add(apiTokenHeader.Value.Key, apiTokenHeader.Value.Value);
}

// Set the user agent
var assembly = Assembly.GetExecutingAssembly();
var userAgent = DaprClientUtilities.GetUserAgent(assembly);
client.DefaultRequestHeaders.Add("User-Agent", userAgent.ToString());
}

// Apply any configuration provided at registration by the developer, if available
configureHttpClient?.Invoke(serviceProvider, client);
});
});

var registration = new Func<IServiceProvider, TClient>(provider =>
{
var configuration = provider.GetService<IConfiguration>();
var builder = (TClientBuilder)Activator.CreateInstance(typeof(TClientBuilder), configuration)!;

builder.UseDaprApiToken(DaprDefaults.GetDefaultDaprApiToken(configuration));
var daprHttpClientFactory = provider.GetRequiredService<IDaprHttpClientFactory>();
var builder = (TClientBuilder)Activator.CreateInstance(typeof(TClientBuilder), daprHttpClientFactory, configuration)!;

builder.UseDaprApiToken(DaprDefaults.GetDefaultDaprApiToken(configuration));
configure?.Invoke(provider, builder);
var (channel, httpClient, _, daprApiToken) =
builder.BuildDaprClientDependencies(Assembly.GetExecutingAssembly());
builder.BuildDaprClientDependencies();
var daprClient = new Autogenerated.DaprClient(channel);
return (TClient)Activator.CreateInstance(typeof(TConcreteClient), daprClient, httpClient, daprApiToken)!;
});
Expand Down
15 changes: 15 additions & 0 deletions src/Dapr.Common/Http/DefaultDaprHttpClientFactory.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
namespace Dapr.Common.Http;

/// <summary>
/// Concrete implementation of a <see cref="IDaprHttpClientFactory"/>.
/// </summary>
public sealed class DefaultDaprHttpClientFactory(IHttpClientFactory httpClientFactory, Action<HttpClient> configure) : IDaprHttpClientFactory
{
/// <inheritdoc />
public HttpClient CreateClient()
{
var client = httpClientFactory.CreateClient();
configure(client);
return client;
}
}
13 changes: 13 additions & 0 deletions src/Dapr.Common/Http/IDaprHttpClientFactory.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
namespace Dapr.Common.Http;

/// <summary>
/// Factory for creating Dapr-configured <see cref="HttpClient"/> instances.
/// </summary>
public interface IDaprHttpClientFactory
{
/// <summary>
/// Produces a Dapr-configured <see cref="HttpClient"/> instance.
/// </summary>
/// <returns></returns>
HttpClient CreateClient();
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

using System.Diagnostics.CodeAnalysis;
using Dapr.Common;
using Dapr.Common.Http;
using Microsoft.Extensions.Configuration;
using Autogenerated = Dapr.Client.Autogen.Grpc.v1;

Expand All @@ -23,15 +24,15 @@
/// </summary>
/// <param name="configuration">An optional instance of <see cref="IConfiguration"/>.</param>
[Experimental("DAPR_CRYPTOGRAPHY", UrlFormat = "https://docs.dapr.io/developing-applications/building-blocks/cryptography/cryptography-overview/")]
public sealed class DaprEncryptionClientBuilder(IConfiguration? configuration = null) : DaprGenericClientBuilder<DaprEncryptionClient>(configuration)
public sealed class DaprEncryptionClientBuilder(IDaprHttpClientFactory daprHttpClientFactory, IConfiguration? configuration = null) : DaprGenericClientBuilder<DaprEncryptionClient>(daprHttpClientFactory, configuration)

Check failure on line 27 in src/Dapr.Cryptography/Encryption/DaprEncryptionClientBuilder.cs

View workflow job for this annotation

GitHub Actions / Build

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprEncryptionClientBuilder.DaprEncryptionClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)

Check failure on line 27 in src/Dapr.Cryptography/Encryption/DaprEncryptionClientBuilder.cs

View workflow job for this annotation

GitHub Actions / Build

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprEncryptionClientBuilder.DaprEncryptionClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)

Check failure on line 27 in src/Dapr.Cryptography/Encryption/DaprEncryptionClientBuilder.cs

View workflow job for this annotation

GitHub Actions / Test .NET 8.0

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprEncryptionClientBuilder.DaprEncryptionClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)

Check failure on line 27 in src/Dapr.Cryptography/Encryption/DaprEncryptionClientBuilder.cs

View workflow job for this annotation

GitHub Actions / Test .NET 9.0

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprEncryptionClientBuilder.DaprEncryptionClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)

Check failure on line 27 in src/Dapr.Cryptography/Encryption/DaprEncryptionClientBuilder.cs

View workflow job for this annotation

GitHub Actions / Test .NET 9.0

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprEncryptionClientBuilder.DaprEncryptionClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)

Check failure on line 27 in src/Dapr.Cryptography/Encryption/DaprEncryptionClientBuilder.cs

View workflow job for this annotation

GitHub Actions / integration-test / Integration Tests (8.0)

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprEncryptionClientBuilder.DaprEncryptionClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)

Check failure on line 27 in src/Dapr.Cryptography/Encryption/DaprEncryptionClientBuilder.cs

View workflow job for this annotation

GitHub Actions / integration-test / Integration Tests (8.0)

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprEncryptionClientBuilder.DaprEncryptionClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)

Check failure on line 27 in src/Dapr.Cryptography/Encryption/DaprEncryptionClientBuilder.cs

View workflow job for this annotation

GitHub Actions / integration-test / Integration Tests (9.0)

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprEncryptionClientBuilder.DaprEncryptionClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)

Check failure on line 27 in src/Dapr.Cryptography/Encryption/DaprEncryptionClientBuilder.cs

View workflow job for this annotation

GitHub Actions / integration-test / Integration Tests (9.0)

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprEncryptionClientBuilder.DaprEncryptionClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)
{
/// <summary>
/// Builds the client instance from the properties of the builder.
/// </summary>
/// <returns>The Dapr client instance.</returns>
public override DaprEncryptionClient Build()
{
var daprClientDependencies = this.BuildDaprClientDependencies(typeof(DaprEncryptionClient).Assembly);
var daprClientDependencies = this.BuildDaprClientDependencies();
var client = new Autogenerated.Dapr.DaprClient(daprClientDependencies.channel);
return new DaprEncryptionGrpcClient(client, daprClientDependencies.httpClient, daprClientDependencies.daprApiToken);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ namespace Dapr.Cryptography.Encryption.Extensions;
/// <summary>
/// Contains extension methods for using Dapr cryptography with dependency injection.
/// </summary>
[Experimental("DAPR_CRYPTOGRAPHY", UrlFormat = "https://docs.dapr.io/developing-applications/building-blocks/cryptography/cryptography-overview/")]
[Experimental("DAPR_CRYPTOGRAPHY",
UrlFormat = "https://docs.dapr.io/developing-applications/building-blocks/cryptography/cryptography-overview/")]
public static class DaprCryptographyServiceCollectionExtensions
{
/// <summary>
Expand All @@ -39,6 +40,27 @@ public static IDaprCryptographyBuilder AddDaprEncryptionClient(
services.AddTransient<IEncryptionStreamProcessor, EncryptionStreamProcessor>();
return services
.AddDaprClient<DaprEncryptionClient, DaprEncryptionGrpcClient, DaprCryptographyBuilder,
DaprEncryptionClientBuilder>(configure, lifetime);
DaprEncryptionClientBuilder>(configure, null, lifetime);
}

/// <summary>
/// Adds Dapr encryption/decryption support to the service collection.
/// </summary>
/// <param name="services">The <see cref="IServiceCollection"/>.</param>
/// <param name="configure">Optionally allows greater configuration of the <see cref="DaprEncryptionClient"/> using injected services.</param>
/// <param name="configureHttpClient">Optionally allows greater configuration of the <see cref="HttpClient"/> used by the <see cref="DaprEncryptionClient"/>.</param>
/// <param name="lifetime">The lifetime of the registered services.</param>
/// <returns></returns>
public static IDaprCryptographyBuilder AddDaprEncryptionClient(
this IServiceCollection services,
Action<IServiceProvider, DaprEncryptionClientBuilder>? configure = null,
Action<IServiceProvider, HttpClient>? configureHttpClient = null,
ServiceLifetime lifetime = ServiceLifetime.Singleton)
{
services.AddTransient<IDecryptionStreamProcessor, DecryptionStreamProcessor>();
services.AddTransient<IEncryptionStreamProcessor, EncryptionStreamProcessor>();
return services
.AddDaprClient<DaprEncryptionClient, DaprEncryptionGrpcClient, DaprCryptographyBuilder,
DaprEncryptionClientBuilder>(configure, configureHttpClient, lifetime);
}
}
5 changes: 3 additions & 2 deletions src/Dapr.Jobs/DaprJobsClientBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

using System.Diagnostics.CodeAnalysis;
using Dapr.Common;
using Dapr.Common.Http;
using Microsoft.Extensions.Configuration;
using Autogenerated = Dapr.Client.Autogen.Grpc.v1;

Expand All @@ -23,15 +24,15 @@
/// </summary>
/// <param name="configuration">An optional instance of <see cref="IConfiguration"/>.</param>
[Experimental("DAPR_JOBS", UrlFormat = "https://docs.dapr.io/developing-applications/building-blocks/jobs/jobs-overview/")]
public sealed class DaprJobsClientBuilder(IConfiguration? configuration = null) : DaprGenericClientBuilder<DaprJobsClient>(configuration)
public sealed class DaprJobsClientBuilder(IDaprHttpClientFactory daprHttpClientFactory, IConfiguration? configuration = null) : DaprGenericClientBuilder<DaprJobsClient>(daprHttpClientFactory, configuration)

Check failure on line 27 in src/Dapr.Jobs/DaprJobsClientBuilder.cs

View workflow job for this annotation

GitHub Actions / Build

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprJobsClientBuilder.DaprJobsClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)

Check failure on line 27 in src/Dapr.Jobs/DaprJobsClientBuilder.cs

View workflow job for this annotation

GitHub Actions / Build

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprJobsClientBuilder.DaprJobsClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)

Check failure on line 27 in src/Dapr.Jobs/DaprJobsClientBuilder.cs

View workflow job for this annotation

GitHub Actions / Test .NET 8.0

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprJobsClientBuilder.DaprJobsClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)

Check failure on line 27 in src/Dapr.Jobs/DaprJobsClientBuilder.cs

View workflow job for this annotation

GitHub Actions / Test .NET 8.0

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprJobsClientBuilder.DaprJobsClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)

Check failure on line 27 in src/Dapr.Jobs/DaprJobsClientBuilder.cs

View workflow job for this annotation

GitHub Actions / Test .NET 9.0

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprJobsClientBuilder.DaprJobsClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)

Check failure on line 27 in src/Dapr.Jobs/DaprJobsClientBuilder.cs

View workflow job for this annotation

GitHub Actions / Test .NET 9.0

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprJobsClientBuilder.DaprJobsClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)

Check failure on line 27 in src/Dapr.Jobs/DaprJobsClientBuilder.cs

View workflow job for this annotation

GitHub Actions / integration-test / Integration Tests (8.0)

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprJobsClientBuilder.DaprJobsClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)

Check failure on line 27 in src/Dapr.Jobs/DaprJobsClientBuilder.cs

View workflow job for this annotation

GitHub Actions / integration-test / Integration Tests (8.0)

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprJobsClientBuilder.DaprJobsClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)

Check failure on line 27 in src/Dapr.Jobs/DaprJobsClientBuilder.cs

View workflow job for this annotation

GitHub Actions / integration-test / Integration Tests (9.0)

Parameter 'daprHttpClientFactory' has no matching param tag in the XML comment for 'DaprJobsClientBuilder.DaprJobsClientBuilder(IDaprHttpClientFactory, IConfiguration?)' (but other parameters do)
{
/// <summary>
/// Builds the client instance from the properties of the builder.
/// </summary>
/// <returns>The Dapr client instance.</returns>
public override DaprJobsClient Build()
{
var daprClientDependencies = this.BuildDaprClientDependencies(typeof(DaprJobsClient).Assembly);
var daprClientDependencies = this.BuildDaprClientDependencies();
var client = new Autogenerated.Dapr.DaprClient(daprClientDependencies.channel);
return new DaprJobsGrpcClient(client, daprClientDependencies.httpClient, daprClientDependencies.daprApiToken);
}
Expand Down
Loading
Loading