in src/dotnet/AspireWorker/AspireHost/AspireHostService.cs [11:62]
internal sealed class AspireHostService(
IRdConnectionWrapper connectionWrapper,
ResiliencePipelineProvider<string> resiliencePipelineProvider,
IHostEnvironment hostEnvironment,
ILoggerFactory loggerFactory
) : IAspireHostService
{
private readonly Dictionary<string, AspireHost> _hosts = new();
public void AddNewHost(string id, AspireHostModel host, Lifetime lifetime)
{
var aspireHost = new AspireHost(
id,
connectionWrapper,
host,
resiliencePipelineProvider,
hostEnvironment,
loggerFactory,
lifetime);
_hosts.AddLifetimed(lifetime, new KeyValuePair<string, AspireHost>(id, aspireHost));
}
public async Task<(string? sessionId, ErrorResponse? error)?> CreateSession(string aspireHostId, Session session)
{
var aspireHost = _hosts.GetValueOrDefault(aspireHostId);
if (aspireHost is null)
{
return null;
}
return await aspireHost.Create(session);
}
public async Task<(string? sessionId, ErrorResponse? error)?> DeleteSession(string aspireHostId, string sessionId)
{
var aspireHost = _hosts.GetValueOrDefault(aspireHostId);
if (aspireHost is null)
{
return null;
}
return await aspireHost.Delete(sessionId);
}
public ChannelReader<ISessionEvent>? GetSessionEventReader(string aspireHostId)
{
var aspireHost = _hosts.GetValueOrDefault(aspireHostId);
return aspireHost?.SessionEventReader;
}
}