Tapis.Core.Infrastructure
1.0.13
dotnet add package Tapis.Core.Infrastructure --version 1.0.13
NuGet\Install-Package Tapis.Core.Infrastructure -Version 1.0.13
<PackageReference Include="Tapis.Core.Infrastructure" Version="1.0.13" />
<PackageVersion Include="Tapis.Core.Infrastructure" Version="1.0.13" />
<PackageReference Include="Tapis.Core.Infrastructure" />
paket add Tapis.Core.Infrastructure --version 1.0.13
#r "nuget: Tapis.Core.Infrastructure, 1.0.13"
#:package Tapis.Core.Infrastructure@1.0.13
#addin nuget:?package=Tapis.Core.Infrastructure&version=1.0.13
#tool nuget:?package=Tapis.Core.Infrastructure&version=1.0.13
Tapis.Core.Infrastructure
ASP.NET Core middleware, EF Core audit/concurrency interceptorları, Refit ürün API client'ları, permission attribute'ları, TapisExceptionHandler, IServiceExceptionHandler uygulaması ve isteğe bağlı Elasticsearch ILogger sağlayıcısı (AddTapisElasticsearch).
Tapis.Core.Shared üzerine ProjectReference.
1.0.4'ten itibaren Guid damga üreten VersiyonSaveChangesInterceptor ve
modelBuilder.ConfigureVersiyonluEntities() uzantısı kaldırıldı: damga
PostgreSQL'in xmin sistem sütunu (PERSISTENCE-STANDARDS §8).
Yerine modelBuilder.ConfigureXminConcurrency() geldi. Ürün DbContext'i bunu
OnModelCreating sonunda, kendi yapılandırmalarından sonra çağırır:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// ... ürünün kendi yapılandırmaları
modelBuilder.ConfigureXminConcurrency();
}
Uzantı tabloya eşlenmiş her entity'ye xmin gölge özelliğini concurrency
token olarak bağlar; owned, anahtarsız ve türetilmiş TPH tiplerini atlar.
Satıra yeni bir sütun eklenmez — xmin PostgreSQL'in zaten tuttuğu sistem
sütunudur.
1.0.5: eşleme EF'in standart mekanizmasıyla kurulur — gölge uint xmin özelliği
IsRowVersion() olur, Npgsql 7+ convention'ı onu xmin/xid'e eşler (sütun adı ve tipi elle
verilmez). Özellik gölge kalır: CLR özelliği olsaydı nesne eşleyiciler istemci damgasını
CurrentValue'ya yazar ve kontrol sessizce kapanırdı. Uzantı yalnız Npgsql üzerinde çağrılır
(if (Database.IsNpgsql())); yalnız PostgreSQL desteklenir. Paket
Npgsql'e bağımlı değildir.
1.0.6: modelBuilder.ConfigureTurkishCaseInsensitive() — Türkçe, büyük/küçük harfe duyarsız ICU
collation'ı (tr_ci = tr-TR-u-ks-level2, deterministic: false) modele ekler ve tabloya eşlenmiş her
metin özelliğine atar; eski SQL Server TURKISH_CI_AS davranışının PostgreSQL karşılığıdır. PostgreSQL 18+ gerekir
(nondeterministic collation ile LIKE/strpos). Harf farkının anlam taşıdığı teknik değerler
yapılandırmada .HarfDuyarli() ile işaretlenir. Bu kolonlarda ILIKE ve regex desteklenmez; düz
Contains/StartsWith yeterlidir.
if (Database.IsNpgsql())
{
modelBuilder.ConfigureXminConcurrency();
modelBuilder.ConfigureTurkishCaseInsensitive();
}
Bu sürümden itibaren paket Npgsql.EntityFrameworkCore.PostgreSQL (10.0.0) paketine bağımlıdır
(HasCollation).
Audit interceptor (AuditSaveChangesInterceptor) ve
IServiceExceptionHandler değişmedi.
1.0.8: ISistemTanimDbContext ve SistemTanimStore kaldırıldı — Core ürün DbContext'ine bağlı
sözleşme taşımaz. Ürün ISistemTanimStore'u (Shared) kendi DbContext'i üzerinden gerçekleştirir; SistemTanim
entity'si Shared'da kalır ve ürün DbContext'ine eklenir.
1.0.12: Hata olayı yayıncısı (opt-in). services.AddTanilamaOlayYayini(configuration) çağrılmazsa bağlantı ve hosted
service açılmaz. ITanilamaOlayKuyrugu.TryWrite(olay) kullanıcı yolunda senkron çalışır, bekletmez, fırlatmaz; olay sınırlı
bellek kanalına girer, arka plan yayıncısı maskeler ve RabbitMQ'ya publisher-confirm ile bırakır (user_id = bağlantı
kullanıcısı). Kanal doluysa, olay MaksOlayBayt'ı aşarsa, deneme hakkı bitmişse veya Tanilama:Broker:* (Host, Username,
Password, Exchange) eksikse olay düşürülür ve sayılır (Tapis.Core.Tanilama meter'ı); başka kimliğe ya da HTTP'ye yedek yoktur.
Uygulama istemcisi topoloji declare etmez. Tüketici Core'da değildir (Master'ın Monitoring klasöründe).
1.0.13: Destek eki köprüsü (opt-in, F2.3). services.AddMasterDestekEkKoprusu(configuration) (Tenancy:MasterUrl/ClientId/ ClientSecret) IMasterDestekEkKoprusuApi'yi kendi named HttpClient'ı ve kendi keyed token sağlayıcısıyla
(MasterDestekEkKoprusuServiceCollectionExtensions.TokenProviderKey) kaydeder; token yalnız support.ticket.attachment.read
ister. AddMasterDestekKoprusu'nun [write, read] token'ı değişmez: Master bu scope'u client'a vermemişse yalnız ek indirme
düşer. EkIndirAsync(MasterDestekTalebiEkIndirDTO) HttpResponseMessage döner (başlıklar önce, gövde tamponlanmaz, 4xx/5xx
fırlatmaz). Ürün adapter'ı durumu okur (404 → 404, 429 → 429, token reddi/401/403/taşıma → 503) ve başarılı yanıtı
SayanEkAkisi.AcAsync(yanit) ile sarar: akış baytları sayar, DestekEkSinirlari.IndirmeEnFazlaBayt (9.000.000) aşılınca
EkBoyutSiniriAsildiException fırlatır, bildirilen Content-Length sınırın üstündeyse hiç okumaz; dispose edilince yanıtı da
bırakır (yanıtın ömrü akışa bağlı). HttpResponseMessage ürünün Application port'unu geçmez.
Target Framework
- .NET 10
Installation
dotnet add package Tapis.Core.Infrastructure
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Elastic.Extensions.Logging (>= 9.0.0)
- Microsoft.EntityFrameworkCore (>= 10.0.10)
- Microsoft.EntityFrameworkCore.Relational (>= 10.0.10)
- Npgsql.EntityFrameworkCore.PostgreSQL (>= 10.0.0)
- RabbitMQ.Client (>= 7.2.2)
- Refit (>= 8.0.0)
- Tapis.Core.Shared (>= 2.0.13)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Destek eki köprüsü (F2.3-1, opt-in, eklemeli): IMasterDestekEkKoprusuApi.EkIndirAsync (POST api/DestekTalebi/UrundenEkIndir, Task<HttpResponseMessage>, gövde tamponlanmaz, 4xx/5xx fırlatmaz); AddMasterDestekEkKoprusu(IConfiguration): ayrı named HttpClient + ayrı keyed IMasterClientTokenProvider, token yalnız support.ticket.attachment.read ister (mevcut AddMasterDestekKoprusu [write, read] token isteği değişmedi); SayanEkAkisi.AcAsync: yanıt gövdesini sayarak 9.000.000 baytta EkBoyutSiniriAsildiException ile keser, Content-Length'e güvenmez, yanıtın ömrünü akışa bağlar. Shared 2.0.13 gerektirir.