Dreamine.MVVM.Core 1.0.13
중요: 자동 등록된 타입은 기본적으로 Singleton으로 등록됩니다. 따라서 자동 발견된 ViewModel, Model, Event, Manager는 애플리케이션이 별도 수명으로 명시 등록하지 않는 한 반복 해석 시 동일 인스턴스를 유지합니다.
로딩중...
검색중...
일치하는것 없음
NamingConventionAutoRegistrationFilter.cs
이 파일의 문서화 페이지로 가기
1using System;
2using System.Linq;
3using Dreamine.MVVM.Interfaces.DependencyInjection;
4
6{
15 public sealed class NamingConventionAutoRegistrationFilter : IAutoRegistrationFilter
16 {
49 public bool IsTarget(Type type)
50 {
51 if (type is null)
52 {
53 throw new ArgumentNullException(nameof(type));
54 }
55
56 if (!IsConcreteClass(type))
57 {
58 return false;
59 }
60
61 string name = type.Name;
62 string fullName = type.FullName ?? string.Empty;
63
65 name.EndsWith("Model", StringComparison.Ordinal) ||
66 name.EndsWith("Event", StringComparison.Ordinal) ||
67 IsManagerTarget(name, fullName) ||
68 name.EndsWith("ViewModel", StringComparison.Ordinal) ||
69 fullName.Contains(".xaml.ViewModel", StringComparison.Ordinal) ||
70 fullName.Contains(".xaml.Model", StringComparison.Ordinal) ||
71 fullName.Contains(".xaml.Event", StringComparison.Ordinal);
72 }
73
98 private static bool IsConcreteClass(Type type)
99 {
100 return type.IsClass &&
101 !type.IsAbstract &&
102 !type.IsGenericTypeDefinition;
103 }
104
137 private static bool IsManagerTarget(string name, string fullName)
138 {
139 return name.EndsWith("Manager", StringComparison.Ordinal) &&
140 (fullName.Contains(".Managers.", StringComparison.Ordinal) ||
141 fullName.Contains(".xaml.", StringComparison.Ordinal));
142 }
143
168 private static bool HasExplicitDreamineRegistrationAttribute(Type type)
169 {
170 return type.GetCustomAttributes(inherit: false)
171 .Any(attribute => attribute.GetType().Name is "DreamineRegisterAttribute" or "DreamineAutoRegisterAttribute");
172 }
173 }
174}