ASP.NET Core
Регистрация
Вызовите AddEnma() в Program.cs:
builder.Services.AddEnma(o =>
{
o.ApiToken = builder.Configuration["Enma:ApiToken"]!;
o.OrganizationId = Guid.Parse(builder.Configuration["Enma:OrgId"]!);
o.ProjectId = Guid.Parse(builder.Configuration["Enma:ProjectId"]!);
o.SdkClientId = Guid.Parse(builder.Configuration["Enma:SdkClientId"]!);
});AddEnma() регистрирует:
IEnmaClientкак singletonIHostedServiceдля корректного завершения (отправка оставшихся событий при остановке хоста)
Привязка через IConfiguration
Вместо инлайн-конфигурации можно привязать секцию целиком:
// appsettings.json
{
"Enma": {
"ApiToken": "sdk_...",
"OrganizationId": "...",
"ProjectId": "...",
"SdkClientId": "...",
"BatchSize": 100,
"MaxRetries": 5
}
}builder.Services.AddEnma(builder.Configuration.GetSection("Enma"));Использование через DI
Внедряйте IEnmaClient в контроллеры, сервисы или middleware:
public class OrdersController : ControllerBase
{
private readonly IEnmaClient _enma;
public OrdersController(IEnmaClient enma) => _enma = enma;
[HttpPost]
public IActionResult CreateOrder(CreateOrderRequest request)
{
_enma.Track("order.created", e =>
{
e.Actor.UserId = User.FindFirst("sub")?.Value;
e.Payload = new { request.ProductId, request.Quantity };
});
return Ok();
}
}Корректное завершение
При использовании AddEnma() все буферизованные события автоматически отправляются при остановке хоста через IHostedService. Вызывать FlushAsync() вручную не нужно.
Пример с middleware и тегами
builder.Services.AddEnma(o =>
{
o.ApiToken = "sdk_...";
o.OrganizationId = Guid.Parse("...");
o.ProjectId = Guid.Parse("...");
o.SdkClientId = Guid.Parse("...");
// Глобальные теги
o.DefaultTags["service"] = "order-api";
o.DefaultTags["env"] = builder.Environment.EnvironmentName;
// Middleware — добавляем имя хоста
o.Use(next => async (evt, ct) =>
{
evt.Tags ??= new Dictionary<string, string>();
evt.Tags["host"] = Environment.MachineName;
await next(evt, ct);
});
});