Ho capito dove sta il problema, adesso devo cercare di capire il motivo :)
Ho dichiarato il middleware
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseWhen(context => context.Request.Path.StartsWithSegments("/api/Auth"), appBuilder =>
{
appBuilder.UseMiddleware(typeof(AuthMiddleware));
});
Questo è il codice del middleware
public class AuthMiddleware
{
readonly RequestDelegate _next;
readonly AuthAppConfig _config;
readonly PolicyDecisionPointManager _policyDecision;
IAuthManager _authManager;
readonly ISTLogger _logger;
public AuthMiddleware(RequestDelegate next, IOptions<AuthAppConfig> config, IHostingEnvironment env)
{
_logger = STLoggerFactory.Logger;
_next = next;
_config = config.Value;
_policyDecision = new PolicyDecisionPointManager(env, _logger);
}
public async Task Invoke(HttpContext httpContext, IUserData _userData)
{
_authManager = new AuthBasicManager(_config, _userData, _logger);
}
}
Dichiaro la classe AuthBasicManager
public class AuthBasicManager : IAuthManager
{
private readonly IUserData _userData;
public AuthBasicManager(AuthAppConfig config, IUserData userData, ISTLogger logger)
{
_userData = userData;
}
Facendo così il valore GUID che ho isnerito nella classe userData dentro la classe AuthMiddleware è sempre quello corretto.
Invece nella classe AuthBasicManager rimane sempre e solo memeorizzato la userData della prima chiamaata (il guid che ho inserito per tenere traccia è sempre quello).
Se invece nel middleware cambio da
_authManager = new AuthBasicManager(_config, _userData, _logger);
a
IAuthManager _authManager = new AuthBasicManager(_config, _userData, _logger);
Ovvero questa variabile è usata solo nell'Invoke e non memeorizzata nella classe allora tutto funziona correttamente.
Mi sfugge qualcosa nel flusso delle chiamate, probabilmente la classe middleware viene instanziata solo la prima volta, però la invoke dovrebbe ridichiararmi la _authManager... e non capisco... però il problema è proprio in questo punto