0
0
mirror of https://github.com/alex289/CleanArchitecture.git synced 2025-06-29 18:21:08 +00:00
CleanArchitecture/CleanArchitecture.gRPC/Extensions/ServiceCollectionExtensions.cs
2023-08-30 23:36:48 +02:00

59 lines
1.8 KiB
C#

using CleanArchitecture.gRPC.Contexts;
using CleanArchitecture.gRPC.Interfaces;
using CleanArchitecture.gRPC.Models;
using CleanArchitecture.Proto.Tenants;
using CleanArchitecture.Proto.Users;
using Grpc.Net.Client;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace CleanArchitecture.gRPC.Extensions;
public static class ServiceCollectionExtensions
{
public static IServiceCollection AddGrpcClient(
this IServiceCollection services,
IConfiguration configuration,
string configSectionKey = "gRPC")
{
var settings = new GRPCSettings();
configuration.Bind(configSectionKey, settings);
return AddGrpcClient(services, settings);
}
public static IServiceCollection AddGrpcClient(this IServiceCollection services, GRPCSettings settings)
{
if (!string.IsNullOrWhiteSpace(settings.CleanArchitectureUrl))
{
services.AddCleanArchitectureGrpcClient(settings.CleanArchitectureUrl);
}
services.AddSingleton<ICleanArchitecture, CleanArchitecture>();
return services;
}
public static IServiceCollection AddCleanArchitectureGrpcClient(
this IServiceCollection services,
string gRPCUrl)
{
if (string.IsNullOrWhiteSpace(gRPCUrl))
{
return services;
}
var channel = GrpcChannel.ForAddress(gRPCUrl);
var usersClient = new UsersApi.UsersApiClient(channel);
services.AddSingleton(usersClient);
var tenantsClient = new TenantsApi.TenantsApiClient(channel);
services.AddSingleton(tenantsClient);
services.AddSingleton<IUsersContext, UsersContext>();
services.AddSingleton<ITenantsContext, TenantsContext>();
return services;
}
}