ASP .NET Core IDisplayMetadataProvider
발행: (2025년 12월 22일 오전 07:24 GMT+9)
3 min read
원문: Dev.to
Source: Dev.to
번역할 텍스트를 제공해 주시면 한국어로 번역해 드리겠습니다.
소개
IDisplayMetadataProvider를 구현하는 클래스를 사용하여 FirstName과 같은 속성 이름을 First Name으로 변환하는 방법을 배웁니다.
HTML 테이블 예시
표준 편집 페이지 예시
제공된 클래스를 사용하는 것은 Display 특성을 대체하는 것이 아니라 대안 옵션입니다.
Display 특성을 사용하는 예제 클래스
public partial class Person
{
public int PersonId { get; set; }
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Display(Name = "Last Name")]
public string LastName { get; set; }
[Display(Name = "Email Address")]
public string EmailAddress { get; set; }
}
사용자 정의 제공자를 사용하는 예제 클래스
public partial class Person
{
public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string EmailAddress { get; set; }
}
PascalCaseDisplayMetadataProvider 사용하기
Program.cs 설정
builder.Services.AddControllersWithViews(options =>
{
options.ModelMetadataDetailsProviders.Add(
new PascalCaseDisplayMetadataProvider(
[typeof(Person)],
includeDerivedTypes: false));
});
- Parameter 1: 표시 메타데이터를 사용자 정의해야 하는 대상 타입들의 컬렉션입니다.
- Parameter 2: 지정된 타입의 파생 타입도 처리할지 여부를 나타내는 부울 값입니다.
대체 설정 – 폴더 내 모든 클래스를 동적으로 로드하기
어셈블리에서 클래스 이름을 가져오는 도우미 메서드
static string[] GetClassNamesFromAssembly(Assembly assembly, string? @namespace = null) =>
assembly
.GetTypes()
.Where(t => t is { IsClass: true, IsAbstract: false })
.Where(t => @namespace == null || t.Namespace == @namespace)
.Select(t => t.Name)
.Distinct()
.OrderBy(n => n)
.ToArray();
Main 메서드에서 구성
string ns = typeof(Program).Namespace!;
string[] classNames = GetClassNamesFromAssembly(
typeof(Program).Assembly,
$"{ns}.Models");
// Configures a custom display metadata provider to format PascalCase property names
// into a more readable format.
builder.Services.AddControllersWithViews(options =>
{
options.ModelMetadataDetailsProviders.Add(
new PascalCaseDisplayMetadataProvider(
[.. classNames
.Select(name => Type.GetType($"{ns}.Models.{name}"))
.Where(type => type is not null)
.Cast()],
includeDerivedTypes: false));
});
💡 PascalCaseDisplayMetadataProvider를 각 프로젝트에 복사하는 대신, 해당 클래스를 포함하고 있는 AspCoreHelperLibrary 패키지를 참조하세요.
소스 코드
샘플 프로젝트는 PascalCaseDisplayMetadataProvider를 FluentValidation 및 CSS 기반 필수 필드 표시와 함께 시연합니다.
더 많은 내용이 이어집니다
이 주제에 대한 추가 기사들이 곧 게시될 예정입니다.

