ASP.NET Core’da IDisplayMetadataProvider ile Model Metadata Yönetimini Özelleştirme
ASP.NET Core MVC, web uygulamalarında veri modelleme ve bu verilerin kullanıcı arayüzünde (UI) nasıl görüntüleneceği veya düzenleneceği konusunda güçlü bir yapı sunar. Bu yapının temel taşlarından biri de Model Metadata‘dır. Model metadata, bir model sınıfının veya özelliğinin (property) görüntülenecek adı, açıklama metni, görüntüleme formatı, doğrulama kuralları gibi bilgileri içerir. Varsayılan olarak, ASP.NET Core bu metadata bilgilerini model sınıflarındaki veri açıklaması (data annotation) niteliklerinden (attributes) veya tip yansıtmasından (type reflection) otomatik olarak türetir. Ancak bazı durumlarda bu varsayılan davranış yetersiz kalabilir. İşte tam bu noktada IDisplayMetadataProvider arayüzü devreye girerek, model metadata oluşturma sürecini tamamen özelleştirme ve genişletme imkanı sunar. Bu makalede, IDisplayMetadataProvider‘ın ne olduğunu, nasıl çalıştığını ve ASP.NET Core uygulamalarınızda dinamik ve esnek UI yönetimi için nasıl kullanılabileceğini detaylı bir şekilde inceleyeceğiz.
Giriş: ASP.NET Core’da Model Metadata Yönetimi
Model Metadata Nedir ve Neden Önemlidir?
Model metadata, bir modeldeki özellikler hakkında açıklayıcı bilgiler sağlayan bir veri kümesidir. Örneğin, bir Kullanici modelinde Ad özelliğinin kullanıcıya “Kullanıcı Adı” olarak gösterilmesi, bir Tarih özelliğinin “GG.AA.YYYY” formatında görüntülenmesi veya bir metin alanının çok satırlı bir textarea olarak işlenmesi gibi bilgiler metadata aracılığıyla yönetilir. Bu bilgiler, ASP.NET Core’un HTML yardımcıları (HTML Helpers) veya Tag Helpers tarafından UI elemanları oluşturulurken kullanılır. Doğru metadata yönetimi, daha tutarlı, erişilebilir ve bakımı kolay kullanıcı arayüzleri oluşturmanın anahtarıdır.
Varsayılan Metadata Sağlayıcıların Sınırları
ASP.NET Core, varsayılan olarak DataAnnotationsModelMetadataProvider gibi sağlayıcılar aracılığıyla metadata oluşturur. Bu sağlayıcılar, [DisplayName], [Required], [StringLength] gibi veri açıklaması niteliklerini okuyarak ilgili metadata özelliklerini doldurur. Çoğu senaryoda bu yeterli olsa da, aşağıdaki gibi durumlar varsayılan sağlayıcıların sınırlarını ortaya koyar:
- Metadata’nın dinamik olarak (örneğin, kullanıcı rolüne veya veritabanı ayarlarına göre) belirlenmesi gerektiği durumlar.
- Mevcut niteliklerin yetersiz kaldığı veya özel bir UI davranışının gerektiği durumlar.
- Dış kaynaklardan (XML, JSON dosyaları, API’ler) metadata yükleme ihtiyacı.
- Global olarak belirli bir tipteki tüm özellikler için ortak bir metadata kuralı tanımlama.
IDisplayMetadataProvider’ın Rolü ve Amacı
IDisplayMetadataProvider arayüzü, yukarıda bahsedilen sınırlamaları aşmak için tasarlanmıştır. Bu arayüzü uygulayarak, ASP.NET Core’un model metadata oluşturma sürecine kendi özel mantığınızı enjekte edebilirsiniz. Temel amacı, ModelMetadata nesnesini oluşturulurken veya oluşturulduktan sonra değiştirmek ve böylece özelliklerin UI’da nasıl görüntüleneceği veya düzenleneceği üzerinde tam kontrol sağlamaktır. Bu sayede, uygulamanızın gereksinimlerine göre son derece esnek ve dinamik UI davranışları tanımlayabilirsiniz.
IDisplayMetadataProvider Arayüzü Detaylı İnceleme
Arayüz Tanımı ve CreateDisplayMetadata Metodu
IDisplayMetadataProvider arayüzü oldukça basittir ve yalnızca tek bir metot içerir:
namespace Microsoft.AspNetCore.Mvc.ModelBinding.Metadata
{
public interface IDisplayMetadataProvider : IMetadataDetailsProvider
{
void CreateDisplayMetadata(DisplayMetadataProviderContext context);
}
}
Bu metot, her bir model özelliği veya model tipi için metadata oluşturulurken çağrılır. Geliştiricinin tüm özelleştirme mantığını bu metot içerisinde gerçekleştirmesi beklenir.
DisplayMetadataProviderContext Nesnesi
CreateDisplayMetadata metoduna parametre olarak geçen DisplayMetadataProviderContext nesnesi, özelleştirme işlemi için gerekli tüm bilgileri sağlar. Bu nesne aşağıdaki önemli özelliklere sahiptir:
Metadata: Üzerinde değişiklik yapacağınızDisplayMetadatanesnesini içerir. Bu nesne, özelliklerin görüntülenme ve düzenlenme şeklini kontrol eden birçok özelliğe sahiptir (DisplayName, Description, TemplateHint, IsReadOnly vb.).Key: Metadata'nın oluşturulduğu model veya özelliğin anahtarını (ModelMetadataIdentity) içerir. Bu anahtar, özelliğin tipi, adı ve kapsayıcı tipi gibi bilgileri barındırır.Attributes: Model veya özellik üzerinde tanımlanmış tüm .NET niteliklerini (attributes) içerir. Bu sayede, kendi özel niteliklerinizi tanımlayarak metadata davranışını tetikleyebilirsiniz.
Bu bağlam nesnesi sayesinde, hangi özellik için metadata oluşturulduğunu anlayabilir ve buna göre dinamik kararlar alabilirsiniz.
ModelMetadata Nesnesini Anlamak
DisplayMetadataProviderContext.Metadata özelliği aracılığıyla eriştiğimiz DisplayMetadata nesnesi, aslında ModelMetadata sınıfının bir parçasıdır ve bir özelliğin veya modelin UI ile ilgili tüm bilgilerini tutar. Bu nesnenin değiştirebileceğiniz bazı önemli özellikleri şunlardır:
| Özellik Adı | Açıklama |
|---|---|
DisplayName |
Özelliğin kullanıcıya gösterilecek adı. |
Description |
Özellik hakkında kısa bir açıklama. |
TemplateHint |
Özelliği işlemek için kullanılacak görüntüleme şablonunun (display template) adı. |
IsReadOnly |
Özelliğin düzenlenebilir olup olmadığını belirtir. |
ShowForDisplay |
Özelliğin görüntüleme modunda gösterilip gösterilmeyeceği. |
ShowForEdit |
Özelliğin düzenleme modunda gösterilip gösterilmeyeceği. |
Order |
Özelliklerin UI'da sıralanma düzeni. |
NullDisplayText |
Değer null olduğunda gösterilecek metin. |
Placeholder |
Giriş alanları için yer tutucu metin. |
Bu özellikler üzerinde değişiklik yaparak, ASP.NET Core'un UI oluşturma davranışını doğrudan etkileyebilirsiniz.
Özel Bir IDisplayMetadataProvider Uygulaması Geliştirme
Temel Bir Uygulama Adımları
Özel bir IDisplayMetadataProvider