File: ApplicationModel\ContainerLifetimeAnnotation.cs
Web Access
Project: src\src\Aspire.Hosting\Aspire.Hosting.csproj (Aspire.Hosting)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System.Diagnostics;
 
namespace Aspire.Hosting.ApplicationModel;
 
/// <summary>
/// Lifetime modes for container resources.
/// </summary>
public enum ContainerLifetime
{
    /// <summary>
    /// Create the resource when the app host process starts and dispose of it when the app host process shuts down.
    /// </summary>
    Session,
    /// <summary>
    /// Attempt to re-use a previously created resource (based on the container name) if one exists. Do not destroy the container on app host process shutdown.
    /// </summary>
    /// <remarks>
    /// In the event that a container with the given name does not exist, a new container will always be created based on the
    /// current <see cref="ContainerResource"/> configuration.
    /// <para>When an existing container IS found, Aspire MAY re-use it based on the following criteria:</para>
    /// <list type="bullet">
    /// <item>If the container WAS NOT originally created by Aspire, the existing container will be re-used.</item>
    /// <item>If the container WAS originally created by Aspire, and the <see cref="ContainerResource"/> configuration DOES match the existing container, the existing container will be re-used.</item>
    /// <item>If the container WAS originally created by Aspire, and the <see cref="ContainerResource"/> configuration DOES NOT match the existing container, the existing container will be stopped and a new container created in order to apply the updated configuration.</item>
    /// </list>
    /// </remarks>
    Persistent,
}
 
/// <summary>
/// Annotation that controls the lifetime of a container resource.
/// </summary>
[DebuggerDisplay("Type = {GetType().Name,nq}")]
public sealed class ContainerLifetimeAnnotation : IResourceAnnotation
{
    /// <summary>
    /// Gets or sets the lifetime type for the container resource.
    /// </summary>
    public required ContainerLifetime Lifetime { get; set; }
}