Dreamine.MVVM.Locators
1.0.10
Dreamine.MVVM.Locators 프로젝트의 API와 구성 요소를 제공합니다.
Toggle main menu visibility
로딩중...
검색중...
일치하는것 없음
ViewNamingConvention.cs
이 파일의 문서화 페이지로 가기
1
using
System;
2
using
System.Collections.Generic;
3
using
System.Linq;
4
5
namespace
Dreamine.MVVM.Locators
6
{
15
public
static
class
ViewNamingConvention
16
{
25
private
const
string
ViewModelsToken
=
"ViewModels"
;
34
private
const
string
ViewModelToken
=
"ViewModel"
;
43
private
const
string
ViewsToken
=
"Views"
;
52
private
const
string
ViewToken
=
"View"
;
61
private
const
string
PagesToken
=
"Pages"
;
70
private
const
string
PageModelsToken
=
"PageModels"
;
79
private
const
string
PageModelToken
=
"PageModel"
;
88
private
const
string
PageToken
=
"Page"
;
97
private
const
string
DotViewModelToken
=
".ViewModel"
;
106
private
const
string
EmptyToken
=
""
;
107
140
public
static
bool
IsLikelyViewType
(Type type)
141
{
142
ArgumentNullException.ThrowIfNull(type);
143
144
if
(!type.IsClass || type.IsAbstract)
145
{
146
return
false
;
147
}
148
149
string
name = type.Name;
150
151
return
name.EndsWith(
"Window"
, StringComparison.Ordinal)
152
|| name.EndsWith(
"Page"
, StringComparison.Ordinal)
153
|| name.EndsWith(
"View"
, StringComparison.Ordinal)
154
|| name.EndsWith(
"Control"
, StringComparison.Ordinal)
155
|| name.EndsWith(
"Dialog"
, StringComparison.Ordinal)
156
|| name.EndsWith(
"Screen"
, StringComparison.Ordinal)
157
|| name.EndsWith(
"Panel"
, StringComparison.Ordinal);
158
}
159
192
public
static
string
[]
GetViewModelTypeNameCandidates
(Type viewType)
193
{
194
ArgumentNullException.ThrowIfNull(viewType);
195
196
string
viewName = viewType.Name;
197
string
viewNamespace = viewType.Namespace ??
string
.Empty;
198
string
rootNamespace =
GetRootNamespace
(viewNamespace);
199
string
candidateViewModelName = $
"{viewName}ViewModel"
;
200
201
List<string> results = [];
202
203
foreach
(
string
ns
in
BuildViewModelCandidateNamespaces
(viewNamespace, rootNamespace))
204
{
205
AddIfNotEmpty
(results,
string
.IsNullOrWhiteSpace(ns)
206
? candidateViewModelName
207
: $
"{ns}.{candidateViewModelName}"
);
208
}
209
210
AddIfNotEmpty
(results, candidateViewModelName);
211
212
return
[.. results.Distinct(StringComparer.Ordinal)];
213
}
214
247
public
static
string
[]
GetViewTypeNameCandidates
(Type viewModelType)
248
{
249
ArgumentNullException.ThrowIfNull(viewModelType);
250
251
string
viewModelName = viewModelType.Name;
252
if
(!viewModelName.EndsWith(
ViewModelToken
, StringComparison.Ordinal))
253
{
254
return
[];
255
}
256
257
string
viewName = viewModelName[..^
ViewModelToken
.Length];
258
string
viewModelNamespace = viewModelType.Namespace ??
string
.Empty;
259
string
rootNamespace =
GetRootNamespace
(viewModelNamespace);
260
261
List<string> results = [];
262
263
foreach
(
string
ns
in
BuildViewCandidateNamespaces
(viewModelNamespace, rootNamespace))
264
{
265
AddIfNotEmpty
(results,
string
.IsNullOrWhiteSpace(ns)
266
? viewName
267
: $
"{ns}.{viewName}"
);
268
}
269
270
AddIfNotEmpty
(results, viewName);
271
272
return
[.. results.Distinct(StringComparer.Ordinal)];
273
}
274
307
public
static
string
[]
GetViewTypeNameCandidates
(
string
viewModelFullName)
308
{
309
if
(
string
.IsNullOrWhiteSpace(viewModelFullName))
310
{
311
throw
new
ArgumentException(
"ViewModel full name must not be empty."
, nameof(viewModelFullName));
312
}
313
314
string
[] candidates =
315
[
316
viewModelFullName.Replace(
ViewModelsToken
,
ViewsToken
).Replace(
ViewModelToken
,
ViewToken
),
317
viewModelFullName.Replace(
ViewModelsToken
,
ViewsToken
).Replace(
ViewModelToken
,
EmptyToken
),
318
viewModelFullName.Replace(
ViewModelsToken
,
PagesToken
).Replace(
ViewModelToken
,
ViewToken
),
319
viewModelFullName.Replace(
ViewModelsToken
,
PagesToken
).Replace(
ViewModelToken
,
EmptyToken
),
320
viewModelFullName.Replace(
DotViewModelToken
,
EmptyToken
),
321
viewModelFullName.Replace(
DotViewModelToken
,
ViewToken
),
322
viewModelFullName.Replace(
PageModelsToken
,
PagesToken
).Replace(
PageModelToken
,
PageToken
),
323
viewModelFullName.Replace(
PageModelsToken
,
PagesToken
).Replace(
PageModelToken
,
EmptyToken
)
324
];
325
326
return
candidates
327
.Where(candidate => !
string
.IsNullOrWhiteSpace(candidate))
328
.Where(candidate => !
string
.Equals(candidate, viewModelFullName, StringComparison.Ordinal))
329
.Where(candidate => !candidate.EndsWith(
ViewModelToken
, StringComparison.Ordinal))
330
.Distinct(StringComparer.Ordinal)
331
.ToArray();
332
}
333
366
private
static
string
[]
BuildViewModelCandidateNamespaces
(
string
viewNamespace,
string
rootNamespace)
367
{
368
List<string> results = [];
369
370
AddIfNotEmpty
(results, viewNamespace);
371
372
foreach
(
string
candidate
in
BuildNamespaceReplacementCandidates
(viewNamespace,
ViewModelsToken
))
373
{
374
AddIfNotEmpty
(results, candidate);
375
}
376
377
foreach
(
string
parentNs
in
ExpandParentNamespaces
(viewNamespace))
378
{
379
AddIfNotEmpty
(results, $
"{parentNs}.ViewModels"
);
380
AddIfNotEmpty
(results, parentNs);
381
}
382
383
AddIfNotEmpty
(results, $
"{rootNamespace}.ViewModels"
);
384
AddIfNotEmpty
(results, rootNamespace);
385
386
return
[.. results.Distinct(StringComparer.Ordinal)];
387
}
388
421
private
static
string
[]
BuildViewCandidateNamespaces
(
string
viewModelNamespace,
string
rootNamespace)
422
{
423
List<string> results = [];
424
425
AddIfNotEmpty
(results, viewModelNamespace);
426
427
foreach
(
string
candidate
in
BuildViewNamespaceCandidatesFromViewModel
(viewModelNamespace))
428
{
429
AddIfNotEmpty
(results, candidate);
430
}
431
432
foreach
(
string
parentNs
in
ExpandParentNamespaces
(viewModelNamespace))
433
{
434
AddIfNotEmpty
(results, $
"{parentNs}.Views"
);
435
AddIfNotEmpty
(results, $
"{parentNs}.View"
);
436
AddIfNotEmpty
(results, $
"{parentNs}.Pages"
);
437
AddIfNotEmpty
(results, $
"{parentNs}.GUI"
);
438
AddIfNotEmpty
(results, $
"{parentNs}.GUIs"
);
439
AddIfNotEmpty
(results, $
"{parentNs}.Dialogs"
);
440
AddIfNotEmpty
(results, $
"{parentNs}.Screens"
);
441
AddIfNotEmpty
(results, parentNs);
442
}
443
444
AddIfNotEmpty
(results, $
"{rootNamespace}.Views"
);
445
AddIfNotEmpty
(results, $
"{rootNamespace}.View"
);
446
AddIfNotEmpty
(results, $
"{rootNamespace}.Pages"
);
447
AddIfNotEmpty
(results, $
"{rootNamespace}.GUI"
);
448
AddIfNotEmpty
(results, $
"{rootNamespace}.GUIs"
);
449
AddIfNotEmpty
(results, $
"{rootNamespace}.Dialogs"
);
450
AddIfNotEmpty
(results, $
"{rootNamespace}.Screens"
);
451
AddIfNotEmpty
(results, rootNamespace);
452
453
return
[.. results.Distinct(StringComparer.Ordinal)];
454
}
455
488
private
static
IEnumerable<string>
BuildNamespaceReplacementCandidates
(
string
sourceNamespace,
string
replacement)
489
{
490
if
(
string
.IsNullOrWhiteSpace(sourceNamespace))
491
{
492
yield
break
;
493
}
494
495
string
[] tokens =
496
[
497
"Views"
,
498
"View"
,
499
"Pages"
,
500
"Page"
,
501
"Windows"
,
502
"Window"
,
503
"Dialogs"
,
504
"Dialog"
,
505
"GUI"
,
506
"GUIs"
,
507
"Screens"
,
508
"Screen"
,
509
"Controls"
,
510
"Control"
511
];
512
513
foreach
(
string
token
in
tokens)
514
{
515
foreach
(
string
candidate
in
ReplaceNamespaceToken
(sourceNamespace, token, replacement))
516
{
517
yield
return
candidate;
518
}
519
}
520
}
521
546
private
static
IEnumerable<string>
BuildViewNamespaceCandidatesFromViewModel
(
string
sourceNamespace)
547
{
548
if
(
string
.IsNullOrWhiteSpace(sourceNamespace))
549
{
550
yield
break
;
551
}
552
553
string
[] replacements =
554
[
555
"Views"
,
556
"View"
,
557
"Pages"
,
558
"Page"
,
559
"Windows"
,
560
"Window"
,
561
"Dialogs"
,
562
"Dialog"
,
563
"GUI"
,
564
"GUIs"
,
565
"Screens"
,
566
"Screen"
,
567
"Controls"
,
568
"Control"
569
];
570
571
foreach
(
string
replacement
in
replacements)
572
{
573
foreach
(
string
candidate
in
ReplaceNamespaceToken
(sourceNamespace,
ViewModelsToken
, replacement))
574
{
575
yield
return
candidate;
576
}
577
}
578
}
579
620
private
static
IEnumerable<string>
ReplaceNamespaceToken
(
string
sourceNamespace,
string
from,
string
to)
621
{
622
string
middleToken = $
".{from}."
;
623
if
(sourceNamespace.Contains(middleToken, StringComparison.Ordinal))
624
{
625
yield
return
sourceNamespace.Replace(middleToken, $
".{to}."
, StringComparison.Ordinal);
626
}
627
628
string
endToken = $
".{from}"
;
629
if
(sourceNamespace.EndsWith(endToken, StringComparison.Ordinal))
630
{
631
yield
return
sourceNamespace[..^from.Length] + to;
632
}
633
}
634
659
private
static
IEnumerable<string>
ExpandParentNamespaces
(
string
? ns)
660
{
661
if
(
string
.IsNullOrWhiteSpace(ns))
662
{
663
return
Array.Empty<
string
>();
664
}
665
666
List<string> results = [];
667
string
current = ns;
668
669
while
(!
string
.IsNullOrWhiteSpace(current))
670
{
671
int
lastDot = current.LastIndexOf(
'.'
);
672
if
(lastDot < 0)
673
{
674
break
;
675
}
676
677
current = current[..lastDot];
678
if
(!
string
.IsNullOrWhiteSpace(current))
679
{
680
results.Add(current);
681
}
682
}
683
684
return
results;
685
}
686
711
private
static
string
GetRootNamespace
(
string
ns)
712
{
713
if
(
string
.IsNullOrWhiteSpace(ns))
714
{
715
return
string
.Empty;
716
}
717
718
int
index = ns.IndexOf(
'.'
);
719
return
index < 0 ? ns : ns[..index];
720
}
721
746
private
static
void
AddIfNotEmpty
(List<string> list,
string
? value)
747
{
748
if
(!
string
.IsNullOrWhiteSpace(value))
749
{
750
list.Add(value);
751
}
752
}
753
}
754
}
Dreamine.MVVM.Locators
Definition
ViewModelLocator.cs:5
Dreamine.MVVM.Locators.ViewNamingConvention
Definition
ViewNamingConvention.cs:16
Dreamine.MVVM.Locators.ViewNamingConvention.BuildViewNamespaceCandidatesFromViewModel
static IEnumerable< string > BuildViewNamespaceCandidatesFromViewModel(string sourceNamespace)
Definition
ViewNamingConvention.cs:546
Dreamine.MVVM.Locators.ViewNamingConvention.PagesToken
const string PagesToken
Definition
ViewNamingConvention.cs:61
Dreamine.MVVM.Locators.ViewNamingConvention.ViewToken
const string ViewToken
Definition
ViewNamingConvention.cs:52
Dreamine.MVVM.Locators.ViewNamingConvention.GetViewTypeNameCandidates
static string[] GetViewTypeNameCandidates(Type viewModelType)
Definition
ViewNamingConvention.cs:247
Dreamine.MVVM.Locators.ViewNamingConvention.ExpandParentNamespaces
static IEnumerable< string > ExpandParentNamespaces(string? ns)
Definition
ViewNamingConvention.cs:659
Dreamine.MVVM.Locators.ViewNamingConvention.PageToken
const string PageToken
Definition
ViewNamingConvention.cs:88
Dreamine.MVVM.Locators.ViewNamingConvention.AddIfNotEmpty
static void AddIfNotEmpty(List< string > list, string? value)
Definition
ViewNamingConvention.cs:746
Dreamine.MVVM.Locators.ViewNamingConvention.PageModelToken
const string PageModelToken
Definition
ViewNamingConvention.cs:79
Dreamine.MVVM.Locators.ViewNamingConvention.GetViewModelTypeNameCandidates
static string[] GetViewModelTypeNameCandidates(Type viewType)
Definition
ViewNamingConvention.cs:192
Dreamine.MVVM.Locators.ViewNamingConvention.BuildViewModelCandidateNamespaces
static string[] BuildViewModelCandidateNamespaces(string viewNamespace, string rootNamespace)
Definition
ViewNamingConvention.cs:366
Dreamine.MVVM.Locators.ViewNamingConvention.BuildNamespaceReplacementCandidates
static IEnumerable< string > BuildNamespaceReplacementCandidates(string sourceNamespace, string replacement)
Definition
ViewNamingConvention.cs:488
Dreamine.MVVM.Locators.ViewNamingConvention.ViewModelsToken
const string ViewModelsToken
Definition
ViewNamingConvention.cs:25
Dreamine.MVVM.Locators.ViewNamingConvention.PageModelsToken
const string PageModelsToken
Definition
ViewNamingConvention.cs:70
Dreamine.MVVM.Locators.ViewNamingConvention.DotViewModelToken
const string DotViewModelToken
Definition
ViewNamingConvention.cs:97
Dreamine.MVVM.Locators.ViewNamingConvention.BuildViewCandidateNamespaces
static string[] BuildViewCandidateNamespaces(string viewModelNamespace, string rootNamespace)
Definition
ViewNamingConvention.cs:421
Dreamine.MVVM.Locators.ViewNamingConvention.IsLikelyViewType
static bool IsLikelyViewType(Type type)
Definition
ViewNamingConvention.cs:140
Dreamine.MVVM.Locators.ViewNamingConvention.GetRootNamespace
static string GetRootNamespace(string ns)
Definition
ViewNamingConvention.cs:711
Dreamine.MVVM.Locators.ViewNamingConvention.ViewsToken
const string ViewsToken
Definition
ViewNamingConvention.cs:43
Dreamine.MVVM.Locators.ViewNamingConvention.ViewModelToken
const string ViewModelToken
Definition
ViewNamingConvention.cs:34
Dreamine.MVVM.Locators.ViewNamingConvention.GetViewTypeNameCandidates
static string[] GetViewTypeNameCandidates(string viewModelFullName)
Definition
ViewNamingConvention.cs:307
Dreamine.MVVM.Locators.ViewNamingConvention.EmptyToken
const string EmptyToken
Definition
ViewNamingConvention.cs:106
Dreamine.MVVM.Locators.ViewNamingConvention.ReplaceNamespaceToken
static IEnumerable< string > ReplaceNamespaceToken(string sourceNamespace, string from, string to)
Definition
ViewNamingConvention.cs:620
ViewNamingConvention.cs
다음에 의해 생성됨 :
1.17.0