Dreamine.MVVM.Wpf
1.0.3
Dreamine.MVVM.Wpf 사용자 인터페이스 기능과 구성 요소를 제공합니다.
Toggle main menu visibility
로딩중...
검색중...
일치하는것 없음
DreamineAppBuilder.cs
이 파일의 문서화 페이지로 가기
1
using
Dreamine.MVVM.Core;
2
using
Dreamine.MVVM.Core.Locators;
3
using
Dreamine.MVVM.Interfaces.Navigation;
4
using
Dreamine.MVVM.Interfaces.Windows;
5
using
Dreamine.MVVM.Locators;
6
using
Dreamine.MVVM.Locators.Wpf;
7
using
System;
8
using
System.Reflection;
9
using
System.Windows;
10
using
System.Windows.Controls;
11
12
namespace
Dreamine.MVVM.Wpf
13
{
22
public
static
class
DreamineAppBuilder
23
{
32
private
static
readonly
object
SyncRoot
=
new
();
41
private
static
bool
_globalAutoWireHandlerRegistered
;
50
private
static
bool
_autoNavigatorHandlerRegistered
;
51
68
public
static
void
Initialize
(Assembly rootAssembly)
69
{
70
Initialize
(rootAssembly,
DreamineWpfOptions
.
CreateDefault
());
71
}
72
97
public
static
void
Initialize
(Assembly rootAssembly,
DreamineWpfOptions
options)
98
{
99
ArgumentNullException.ThrowIfNull(rootAssembly);
100
ArgumentNullException.ThrowIfNull(options);
101
102
if
(options.
RegisterDefaultServices
)
103
{
104
RegisterDefaultServices
(options);
105
}
106
107
RegisterDefaultViewModelResolver
();
108
109
// ① DI 자동 등록
110
DreamineAutoRegistrar.RegisterAll(rootAssembly);
111
112
// ② View ↔ ViewModel 자동 매핑
113
ViewModelLocator.RegisterAll(rootAssembly);
114
115
// ③ 선택적 Loaded 기반 ViewModel 자동 주입
116
if
(options.
EnableGlobalAutoWireOnLoaded
)
117
{
118
RegisterGlobalAutoWireHandlerOnce
();
119
}
120
121
// ④ 선택적 Region 기반 INavigator 자동 등록
122
if
(options.
EnableAutoNavigatorRegistration
)
123
{
124
RegisterAutoNavigatorHandlerOnce
(options.
DefaultRegionName
);
125
}
126
}
127
136
private
static
void
RegisterDefaultViewModelResolver
()
137
{
138
ViewModelLocator.RegisterResolver(
139
new
DreamineContainerViewModelResolver());
140
}
141
166
public
static
void
RegisterDefaultServices
(
DreamineWpfOptions
? options =
null
)
167
{
168
if
(!DMContainer.IsRegistered<IWindowStateService>())
169
{
170
DMContainer.RegisterSingleton<IWindowStateService,
WindowStateService
>();
171
}
172
173
if
(!DMContainer.IsRegistered<IViewManager>())
174
{
175
var vm = options is not
null
176
?
new
ViewManager
(DMContainer.GetResolver(),
177
options.FallbackWindowWidth,
178
options.FallbackWindowHeight)
179
:
new
ViewManager
();
180
DMContainer.RegisterSingleton<IViewManager>(vm);
181
}
182
183
if
(!DMContainer.IsRegistered<IDialogService>())
184
{
185
DMContainer.RegisterSingleton<IDialogService,
WpfDialogService
>();
186
}
187
}
188
197
public
static
void
RegisterGlobalAutoWireHandlerOnce
()
198
{
199
lock (
SyncRoot
)
200
{
201
if
(
_globalAutoWireHandlerRegistered
)
202
{
203
return
;
204
}
205
206
EventManager.RegisterClassHandler(
207
typeof(FrameworkElement),
208
FrameworkElement.LoadedEvent,
209
new
RoutedEventHandler(
AttachViewModelIfExists
));
210
211
_globalAutoWireHandlerRegistered
=
true
;
212
}
213
}
214
239
public
static
void
RegisterAutoNavigatorHandlerOnce
(
string
defaultRegionName)
240
{
241
if
(
string
.IsNullOrWhiteSpace(defaultRegionName))
242
{
243
throw
new
ArgumentException(
"Default region name must not be empty."
, nameof(defaultRegionName));
244
}
245
246
lock (
SyncRoot
)
247
{
248
if
(
_autoNavigatorHandlerRegistered
)
249
{
250
return
;
251
}
252
253
EventManager.RegisterClassHandler(
254
typeof(Window),
255
FrameworkElement.LoadedEvent,
256
new
RoutedEventHandler((sender, _) =>
257
{
258
if
(sender is Window window)
259
{
260
RegisterNavigatorFromWindow
(window, defaultRegionName);
261
}
262
}));
263
264
_autoNavigatorHandlerRegistered
=
true
;
265
}
266
}
267
300
public
static
void
RegisterNavigatorFromWindow
(Window window,
string
regionName)
301
{
302
ArgumentNullException.ThrowIfNull(window);
303
304
if
(
string
.IsNullOrWhiteSpace(regionName))
305
{
306
throw
new
ArgumentException(
"Region name must not be empty."
, nameof(regionName));
307
}
308
309
ContentControl? region = RegionBinderHelper.FindRegionControl(window, regionName);
310
if
(region is
null
)
311
{
312
return
;
313
}
314
315
DMContainer.RegisterSingleton<INavigator>(
316
new
ContentControlNavigator(region));
317
}
318
343
private
static
void
AttachViewModelIfExists
(
object
sender, RoutedEventArgs e)
344
{
345
if
(sender is not FrameworkElement view)
346
{
347
return
;
348
}
349
350
if
(view.DataContext is not
null
)
351
{
352
return
;
353
}
354
355
if
(view is not Window && view is not UserControl && view is not Page)
356
{
357
return
;
358
}
359
360
object
? viewModel = ViewModelLocator.Resolve(view.GetType());
361
if
(viewModel is not
null
)
362
{
363
view.DataContext = viewModel;
364
}
365
}
366
}
367
}
Dreamine.MVVM.Wpf
Definition
DreamineAppBuilder.cs:13
Dreamine.MVVM.Wpf.DreamineAppBuilder
Definition
DreamineAppBuilder.cs:23
Dreamine.MVVM.Wpf.DreamineAppBuilder._globalAutoWireHandlerRegistered
static bool _globalAutoWireHandlerRegistered
Definition
DreamineAppBuilder.cs:41
Dreamine.MVVM.Wpf.DreamineAppBuilder.Initialize
static void Initialize(Assembly rootAssembly)
Definition
DreamineAppBuilder.cs:68
Dreamine.MVVM.Wpf.DreamineAppBuilder.RegisterAutoNavigatorHandlerOnce
static void RegisterAutoNavigatorHandlerOnce(string defaultRegionName)
Definition
DreamineAppBuilder.cs:239
Dreamine.MVVM.Wpf.DreamineAppBuilder.AttachViewModelIfExists
static void AttachViewModelIfExists(object sender, RoutedEventArgs e)
Definition
DreamineAppBuilder.cs:343
Dreamine.MVVM.Wpf.DreamineAppBuilder.RegisterDefaultViewModelResolver
static void RegisterDefaultViewModelResolver()
Definition
DreamineAppBuilder.cs:136
Dreamine.MVVM.Wpf.DreamineAppBuilder.RegisterNavigatorFromWindow
static void RegisterNavigatorFromWindow(Window window, string regionName)
Definition
DreamineAppBuilder.cs:300
Dreamine.MVVM.Wpf.DreamineAppBuilder.SyncRoot
static readonly object SyncRoot
Definition
DreamineAppBuilder.cs:32
Dreamine.MVVM.Wpf.DreamineAppBuilder.Initialize
static void Initialize(Assembly rootAssembly, DreamineWpfOptions options)
Definition
DreamineAppBuilder.cs:97
Dreamine.MVVM.Wpf.DreamineAppBuilder._autoNavigatorHandlerRegistered
static bool _autoNavigatorHandlerRegistered
Definition
DreamineAppBuilder.cs:50
Dreamine.MVVM.Wpf.DreamineAppBuilder.RegisterDefaultServices
static void RegisterDefaultServices(DreamineWpfOptions? options=null)
Definition
DreamineAppBuilder.cs:166
Dreamine.MVVM.Wpf.DreamineAppBuilder.RegisterGlobalAutoWireHandlerOnce
static void RegisterGlobalAutoWireHandlerOnce()
Definition
DreamineAppBuilder.cs:197
Dreamine.MVVM.Wpf.DreamineWpfOptions
Definition
DreamineWpfOptions.cs:14
Dreamine.MVVM.Wpf.DreamineWpfOptions.EnableGlobalAutoWireOnLoaded
bool EnableGlobalAutoWireOnLoaded
Definition
DreamineWpfOptions.cs:23
Dreamine.MVVM.Wpf.DreamineWpfOptions.RegisterDefaultServices
bool RegisterDefaultServices
Definition
DreamineWpfOptions.cs:33
Dreamine.MVVM.Wpf.DreamineWpfOptions.DefaultRegionName
string DefaultRegionName
Definition
DreamineWpfOptions.cs:53
Dreamine.MVVM.Wpf.DreamineWpfOptions.CreateDefault
static DreamineWpfOptions CreateDefault()
Definition
DreamineWpfOptions.cs:91
Dreamine.MVVM.Wpf.DreamineWpfOptions.EnableAutoNavigatorRegistration
bool EnableAutoNavigatorRegistration
Definition
DreamineWpfOptions.cs:43
Dreamine.MVVM.Wpf.ViewManager
Definition
ViewManager.cs:23
Dreamine.MVVM.Wpf.WindowStateService
Definition
WindowStateService.cs:24
Dreamine.MVVM.Wpf.WpfDialogService
Definition
WpfDialogService.cs:16
DreamineAppBuilder.cs
다음에 의해 생성됨 :
1.17.0