Ich versuche, Request/Response in MassTransit einzurichten, habe aber Probleme mit der AbhängigkeitsinjektionC#

Ein Treffpunkt für C#-Programmierer
Guest
 Ich versuche, Request/Response in MassTransit einzurichten, habe aber Probleme mit der Abhängigkeitsinjektion

Post by Guest »

Ich versuche also, eine Anfrage/Antwort in MassTransit einzurichten und habe ein Problem mit der Abhängigkeitsinjektion. Ich habe keine Ahnung, was es ist, aber ich werde den mit dem Problem verknüpften Code bereitstellen.Dies ist der DependencyContainer für den Token-Microservice: derjenige, der eine Antwort vom Benutzer-Microservice anfordert
Die Ausnahme, die ich beim Start erhalte, ist die nächste:
System.AggregateException: 'Einige Dienste können nicht erstellt werden (Fehler beim Überprüfen des Dienstdeskriptors 'ServiceType: Dodis.TokenSer.Application.Interfaces.ITokenService Lifetime: Transient ImplementationType: Dodis .TokenSer.Application.Services.TokenService': Dienst für Typ kann nicht aufgelöst werden 'MassTransit.IRequestClient`1[Dodis.Domain.Core.Messages.Requests.GetUserRequest]' beim Versuch, 'Dodis.TokenSer.Application.Services.TokenService' zu aktivieren.)'
Inner Ausnahme
InvalidOperationException: Fehler beim Validieren des Dienstdeskriptors „ServiceType: Dodis.TokenSer.Application.Interfaces.ITokenService Lebensdauer: Transient ImplementationType: Dodis.TokenSer.Application.Services.TokenService‘: Der Dienst für den Typ „MassTransit.IRequestClient`1[Dodis.Domain.Core.Messages.Requests.GetUserRequest]“ konnte beim Versuch, „Dodis.TokenSer“ zu aktivieren, nicht aufgelöst werden .Application.Services.TokenService'.

Code: Select all

    public static void RegisterServices(IServiceCollection services, string MicroService, IConfiguration configuration)
{
//services.AddTransient();
var tokenSettings = new TokenSettings();
configuration.Bind("Token", tokenSettings);

services.Configure(configuration.GetSection("Token"));
#region MassTransit
try
{
services.AddMassTransit(config =>
{
config.SetKebabCaseEndpointNameFormatter();
config.AddRequestClient();

config.UsingRabbitMq((context, configurator) =>
{
configurator.Host("localhost", "/", h =>
{
h.Username("guest");
h.Password("guest");
});
configurator.ConfigureEndpoints(context);
});
});

}
catch (Exception ex)
{
throw new Exception(ex.Message, ex);
}

#endregion
try
{
services.AddScoped(sp =>
{
var tokenFactory = sp.GetRequiredService();
var tokenRepository = sp.GetRequiredService();
var requestClient = sp.GetRequiredService();

return new TokenService(tokenFactory, tokenRepository, requestClient);
});
}
catch (Exception ex)
{
throw new Exception(ex.Message, ex);
}
services.AddDbContext(options =>
{
options.UseSqlServer(hiding this);
});
services.AddScoped();
}
}
}
Dann haben wir den TokenService, der den Fehler ausgibt.

Code: Select all

      public class TokenService : ITokenService
{
private readonly ITokenFactory _tokenFactory;
private readonly ITokenRepository _repository;
private readonly IRequestClient _client;

public TokenService(ITokenFactory tokenFactory, ITokenRepository repository, IRequestClient client)
{
_tokenFactory = tokenFactory;
_repository = repository;
_client = client;
}

public async Task  CreateToken(TokenRequest model)
{
var existingToken = await _repository.GetTokenByUserIdAndProvider(model.UserId, "Dodis", "Access_Token");

if (existingToken != null)
{
existingToken.Value = await _tokenFactory.CreateToken(new TokenRequest
{
UserId = model.UserId,
RoleName = model.RoleName,
});
existingToken.ExpireDate = DateTime.UtcNow.AddMinutes(20160);

await _repository.UpdateToken(existingToken);
var response = await _client.GetResponse(new GetUserRequest { Id = model.UserId });
ect...
Dies ist der DependencyContainer des Benutzer-Microservices, der eine Anfrage vom Token-Microservice empfängt und eine Antwort sendet. Ich glaube nicht, dass hier das Problem liegt, aber dennoch teilen

Code: Select all

public static void RegisterServices(IServiceCollection services, string MicroService, IConfiguration? configuration = null)
{
//Mediatr
services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(Assembly.GetExecutingAssembly()));

// MassTransit
try
{
services.AddMassTransit(config =>
{
//// Add the request client
//config.AddRequestClient();
config.SetKebabCaseEndpointNameFormatter();
config.AddConsumer();

config.UsingRabbitMq((context, configurator) =>
{
configurator.Host("rabbitmq://localhost", h =>
{
h.Username("guest");
h.Password("guest");
});
configurator.ConfigureEndpoints(context);
});

});
}
catch (Exception ex)
{
throw new Exception(ex.Message, ex);
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post