Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Poznámky jsou klíčový mechanismus rozšiřitelnosti v Aspire, který umožňuje připojit metadata a chování k prostředkům. Poskytují způsob, jak přizpůsobit, jak se prostředky konfigurují, nasazují a spravují v průběhu životního cyklu aplikace. Tento článek vysvětluje, jak fungují poznámky a jak je efektivně používat ve vašich Aspire aplikacích.
Co jsou poznámky
Anotace v Aspire jsou objekty, které implementují rozhraní IResourceAnnotation. Jsou připojené k prostředkům, aby poskytovaly další metadata, konfiguraci nebo chování. Různé části zásobníku Aspire využívají poznámky, mezi které patří:
- Řídicí panel pro zobrazení vlastních adres URL a příkazů
- Nástroje pro nasazení pro generování infrastruktury jako kódu
- Vrstva hostování pro konfiguraci chování modulu runtime.
- Testování infrastruktury pro kontrolu prostředků
Každá poznámka je přidružená k určitému prostředku a může obsahovat jakákoli data nebo chování potřebná k rozšíření funkčnosti daného prostředku.
Jak fungují poznámky
Když do modelu aplikace přidáte prostředek, můžete poznámky připojit pomocí různých rozšiřujících metod. Tyto poznámky jsou uloženy s prostředkem a lze je načíst a zpracovat různými součástmi systému.
Tady je jednoduchý příklad použití poznámek:
var builder = DistributedApplication.CreateBuilder(args);
var redis = builder.AddRedis("cache")
.WithCommand("clear-cache", "Clear Cache",
async context => new ExecuteCommandResult { Success = true })
.WithUrl("admin", "http://localhost:8080/admin");
builder.Build().Run();
V tomto příkladu:
- WithCommand přidá příkaz ResourceCommandAnnotation , který definuje vlastní příkaz.
- WithUrl přidá ResourceUrlAnnotation, který definuje vlastní adresu URL.
Předdefinované typy poznámek
Aspire obsahuje mnoho předdefinovaných typů poznámek pro běžné scénáře. Tato část popisuje některé běžně používané poznámky, ale pro konkrétní případy použití je k dispozici mnohem více .
EndpointAnnotation
EndpointAnnotation definuje koncové body sítě pro prostředky. Obsahuje informace o portech, protokolech a konfiguraci koncového bodu.
var api = builder.AddProject<Projects.Api>("api")
.WithEndpoint(callback: endpoint =>
{
endpoint.Port = 5000;
endpoint.IsExternal = true;
endpoint.Protocol = Protocol.Tcp;
endpoint.Transport = "http";
});
ResourceUrlAnnotation
Element ResourceUrlAnnotation definuje vlastní adresy URL, které se zobrazují na řídicím panelu a často míří na rozhraní pro správu nebo dokumentaci.
var database = builder.AddPostgres("postgres")
.WithUrl("admin", "https://localhost:5050");
EnvironmentCallbackAnnotation
EnvironmentCallbackAnnotation vám umožňuje upravit proměnné prostředí při běhu programu na základě stavu jiných prostředků.
// This is typically used internally by WithReference
var app = builder.AddProject<Projects.MyApp>("app")
.WithReference(database);
ContainerMountAnnotation
Prvek ContainerMountAnnotation definuje připojení svazků pro kontejnerizované prostředky.
var postgres = builder.AddPostgres("postgres")
.WithDataVolume(); // Adds a ContainerMountAnnotation
PublishingCallbackAnnotation
PublishingCallbackAnnotation vám umožňuje registrovat zpětná volání, která se provádějí během procesu publikování. To je užitečné pro provádění vlastních operací, když jsou zdroje publikovány.
var api = builder.AddProject<Projects.Api>("api")
.WithPublishingCallback(async context =>
{
// Custom logic during publishing
await CustomPublishLogicAsync(context);
});
Další informace najdete v tématu WithPublishingCallback.
DeployingCallbackAnnotation
Tento nástroj DeployingCallbackAnnotation umožňuje registrovat zpětná volání, která se spouštějí během procesu nasazení. Tuto poznámku interně používají nástroje nasazení k přizpůsobení chování nasazení prostředků.
var api = builder.AddProject<Projects.Api>("api");
api.Resource.Annotations.Add(
new DeployingCallbackAnnotation(async context =>
{
// Custom deployment logic
await ConfigureDeploymentAsync(context);
});
);
Další informace o publikování a nasazování Aspire aplikací najdete v tématu publikování a nasazení.
Vytváření vlastních poznámek
Vlastní poznámky Aspire jsou navržené tak, aby zaznamenávaly metadata a chování specifické pro prostředky, které je možné využít v průběhu životního cyklu aplikace. Běžně se používají v:
- Metody rozšíření pro odvození záměru uživatele a nastavení chování zdrojů
- Nástroje pro nasazení pro generování konfigurace specifické pro nasazení
- Háčky životního cyklu pro dotazování modelu aplikace a pro rozhodování za běhu.
- Vývojové nástroje , jako je řídicí panel, slouží k zobrazení informací o prostředcích.
Vlastní poznámky by se měly zaměřit na jeden problém a poskytnout uživatelům metadat prostředků jasnou hodnotu.
1. Definujte třídu poznámek.
Začněte vytvořením třídy, která implementuje IResourceAnnotation. Zaměřte se na zachycení konkrétních metadat, která ostatní komponenty potřebují k odůvodnění vašeho prostředku:
public sealed class ServiceMetricsAnnotation : IResourceAnnotation
{
public string MetricsPath { get; set; } = "/metrics";
public int Port { get; set; } = 9090;
public bool Enabled { get; set; } = true;
public string[] AdditionalLabels { get; set; } = [];
}
2. Vytvoření rozšiřujících metod
Vytvořte rozšiřující metody ve stylu fluent, které se řídí vzorem tvůrce Aspire. Tyto metody by měly autorům AppHost usnadnit konfiguraci poznámek:
public static class ServiceMetricsExtensions
{
public static IResourceBuilder<T> WithMetrics<T>(
this IResourceBuilder<T> builder,
string path = "/metrics",
int port = 9090,
params string[] labels)
where T : class, IResource
{
var annotation = new ServiceMetricsAnnotation
{
MetricsPath = path,
Port = port,
Enabled = true,
AdditionalLabels = labels
};
return builder.WithAnnotation(annotation);
}
public static IResourceBuilder<T> WithoutMetrics<T>(
this IResourceBuilder<T> builder)
where T : class, IResource
{
return builder.WithAnnotation(new ServiceMetricsAnnotation { Enabled = false });
}
}
Metody rozšíření slouží jako primární plocha rozhraní API pro vaši poznámku. Měly by:
- Postupujte podle konvencí pojmenování (začněte s
Withpro operace sčítání). - Poskytovat rozumné výchozí hodnoty.
- Vrátit objekt pro řetězení metod.
- Zahrnout komplexní dokumentaci XML.
3. Použití vlastní poznámky
Po definování se poznámky bezproblémově integrují do modelu AppHost:
var builder = DistributedApplication.CreateBuilder(args);
var api = builder.AddProject<Projects.Api>("api")
.WithMetrics("/api/metrics", 9090, "environment:production", "service:api");
Testování pomocí poznámek
Při psaní testů můžete zkontrolovat poznámky a ověřit konfiguraci prostředků:
[Fact]
public async Task Resource_Should_Have_Expected_Annotations()
{
var appHost = await DistributedApplicationTestingBuilder
.CreateAsync<Projects.MyApp_AppHost>();
await using var app = await appHost.BuildAsync();
var resource = app.Resources.GetResource("my-resource");
// Assert that specific annotations exist
Assert.NotEmpty(resource.Annotations.OfType<ServiceMetricsAnnotation>());
// Assert annotation properties
var metricsConfig = resource.Annotations
.OfType<ServiceMetricsAnnotation>()
.First();
Assert.True(metricsConfig.Enabled);
Assert.Equal("/metrics", metricsConfig.MetricsPath);
}
Další informace naleznete v tématu Testování pomocí Aspire.
Osvědčené postupy
Při práci s poznámkami zvažte tyto osvědčené postupy:
Použití smysluplných názvů
Zvolte popisné názvy tříd a vlastností poznámek:
// Good
public sealed class DatabaseConnectionPoolAnnotation : IResourceAnnotation
// Avoid
public sealed class DbAnnotation : IResourceAnnotation
Postupujte podle návrhového vzoru Builder.
Vytvořte fluentní rozšiřující metody, které se řídí vzorem Builderu Aspire.
var resource = builder.AddMyResource("name")
.WithCustomBehavior()
.WithAnotherFeature();
Zdokumentujte poznámky
Zadejte dokumentaci XML pro vlastní poznámky a rozšiřující metody:
/// <summary>
/// Configures custom caching behavior for the resource.
/// </summary>
/// <param name="builder">The resource builder.</param>
/// <param name="ttl">The time-to-live for cached items.</param>
/// <returns>The resource builder for chaining.</returns>
public static IResourceBuilder<T> WithCaching<T>(
this IResourceBuilder<T> builder,
TimeSpan ttl)
where T : class, IResource { /*...*/ }
Zachování jednoduchých poznámek
Poznámky by se měly zaměřit na jednu odpovědnost:
// Good - single responsibility
public sealed class RetryPolicyAnnotation : IResourceAnnotation
{
public int MaxRetries { get; set; }
public TimeSpan Delay { get; set; }
}
// Avoid - multiple responsibilities
public sealed class ConfigAnnotation : IResourceAnnotation
{
public RetryPolicy RetryPolicy { get; set; }
public LoggingSettings Logging { get; set; }
public SecuritySettings Security { get; set; }
}
Další kroky
- Další informace o příkazech pro vlastní prostředky
- Prozkoumat vlastní adresy URL prostředků
- Viz vytvoření vlastních integrací hostování.
- Prozkoumejte referenci rozhraní API modelu aplikaceAspire