Dreamine.MVVM.Wpf 1.0.3
Dreamine.MVVM.Wpf 사용자 인터페이스 기능과 구성 요소를 제공합니다.
로딩중...
검색중...
일치하는것 없음
Dreamine.MVVM.Wpf.DreamineAppBuilder 클래스 참조

더 자세히 ...

정적 Public 멤버 함수

static void Initialize (Assembly rootAssembly)
static void Initialize (Assembly rootAssembly, DreamineWpfOptions options)
static void RegisterDefaultServices (DreamineWpfOptions? options=null)
static void RegisterGlobalAutoWireHandlerOnce ()
static void RegisterAutoNavigatorHandlerOnce (string defaultRegionName)
static void RegisterNavigatorFromWindow (Window window, string regionName)

정적 Private 멤버 함수

static void RegisterDefaultViewModelResolver ()
static void AttachViewModelIfExists (object sender, RoutedEventArgs e)

정적 Private 속성

static readonly object SyncRoot = new()
static bool _globalAutoWireHandlerRegistered
static bool _autoNavigatorHandlerRegistered

상세한 설명

Dreamine WPF 애플리케이션 초기화를 담당합니다.

DreamineAppBuilder.cs 파일의 22 번째 라인에서 정의되었습니다.

멤버 함수 문서화

◆ AttachViewModelIfExists()

void Dreamine.MVVM.Wpf.DreamineAppBuilder.AttachViewModelIfExists ( object sender,
RoutedEventArgs e )
inlinestaticprivate

WPF FrameworkElement의 Loaded 이벤트에서 호출되는 핸들러입니다. View의 DataContext가 비어 있을 경우, ViewModelLocator를 통해 ViewModel을 자동 연결합니다.

매개변수
sender이벤트가 발생한 View 인스턴스입니다.
e라우팅 이벤트 인자입니다.

DreamineAppBuilder.cs 파일의 343 번째 라인에서 정의되었습니다.

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 }

다음에 의해서 참조됨 : RegisterGlobalAutoWireHandlerOnce().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ Initialize() [1/2]

void Dreamine.MVVM.Wpf.DreamineAppBuilder.Initialize ( Assembly rootAssembly)
inlinestatic

Dreamine MVVM WPF 런타임을 기본 옵션으로 초기화합니다.

매개변수
rootAssemblyView, ViewModel, Model, Event, Manager 등의 자동 등록 및 매핑 대상으로 사용할 루트 어셈블리입니다.

DreamineAppBuilder.cs 파일의 68 번째 라인에서 정의되었습니다.

69 {
70 Initialize(rootAssembly, DreamineWpfOptions.CreateDefault());
71 }

다음을 참조함 : Dreamine.MVVM.Wpf.DreamineWpfOptions.CreateDefault(), Initialize().

다음에 의해서 참조됨 : Initialize().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ Initialize() [2/2]

void Dreamine.MVVM.Wpf.DreamineAppBuilder.Initialize ( Assembly rootAssembly,
DreamineWpfOptions options )
inlinestatic

Dreamine MVVM WPF 런타임을 지정한 옵션으로 초기화합니다.

매개변수
rootAssemblyView, ViewModel, Model, Event, Manager 등의 자동 등록 및 매핑 대상으로 사용할 루트 어셈블리입니다.
optionsWPF 런타임 초기화 옵션입니다.

DreamineAppBuilder.cs 파일의 97 번째 라인에서 정의되었습니다.

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 }

다음을 참조함 : Dreamine.MVVM.Wpf.DreamineWpfOptions.DefaultRegionName, Dreamine.MVVM.Wpf.DreamineWpfOptions.EnableAutoNavigatorRegistration, Dreamine.MVVM.Wpf.DreamineWpfOptions.EnableGlobalAutoWireOnLoaded, RegisterAutoNavigatorHandlerOnce(), RegisterDefaultServices(), Dreamine.MVVM.Wpf.DreamineWpfOptions.RegisterDefaultServices, RegisterDefaultViewModelResolver(), RegisterGlobalAutoWireHandlerOnce().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ RegisterAutoNavigatorHandlerOnce()

void Dreamine.MVVM.Wpf.DreamineAppBuilder.RegisterAutoNavigatorHandlerOnce ( string defaultRegionName)
inlinestatic

Window Loaded 시점에 지정된 RegionName을 찾아 INavigator를 자동 등록하는 핸들러를 한 번만 등록합니다.

매개변수
defaultRegionName기본 Region 이름입니다.
예외
ArgumentException입력 인자가 유효하지 않은 경우 발생합니다.

DreamineAppBuilder.cs 파일의 239 번째 라인에서 정의되었습니다.

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 }

다음을 참조함 : _autoNavigatorHandlerRegistered, RegisterNavigatorFromWindow(), SyncRoot.

다음에 의해서 참조됨 : Initialize().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ RegisterDefaultServices()

void Dreamine.MVVM.Wpf.DreamineAppBuilder.RegisterDefaultServices ( DreamineWpfOptions? options = null)
inlinestatic

Dreamine WPF 기본 서비스를 등록합니다. 이미 등록된 서비스는 덮어쓰지 않습니다.

매개변수
options동작을 구성하는 설정입니다.

MS.Extensions.DI 혼용 시 주의사항 (Fix 7) Hybrid(Blazor+WPF) 시나리오에서 IServiceCollection.AddDreamineHybridWpf()를 사용하면 Blazor의 IServiceProvider와 Dreamine의 DMContainer가 동시에 활성화됩니다. 이중 등록으로 인한 혼란을 방지하려면:

  1. App.xaml.cs 의 Composition Root에서 DreamineAppBuilder.Initialize()를 먼저 호출하여 DMContainer를 구성한 후, IServiceCollectionservices.AddSingleton<IViewManager>(sp => DMContainer.Resolve<IViewManager>()) 형태로 브리지 등록하십시오.
  2. 단일 서비스를 두 컨테이너 모두에 직접 등록하지 마십시오. 어느 한쪽에만 등록하고 다른 쪽은 팩토리 위임으로 연결하는 것이 안전합니다.
  3. 장기적으로는 DMContainer.SetContainer(new MsExtensionsAdapter(serviceProvider)) 패턴으로 DMContainer가 MS.Extensions.DI를 백엔드로 사용하도록 통합할 수 있습니다.

DreamineAppBuilder.cs 파일의 166 번째 라인에서 정의되었습니다.

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 }

다음에 의해서 참조됨 : Initialize().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ RegisterDefaultViewModelResolver()

void Dreamine.MVVM.Wpf.DreamineAppBuilder.RegisterDefaultViewModelResolver ( )
inlinestaticprivate

Register Default View Model Resolver 작업을 수행합니다.

DreamineAppBuilder.cs 파일의 136 번째 라인에서 정의되었습니다.

137 {
138 ViewModelLocator.RegisterResolver(
139 new DreamineContainerViewModelResolver());
140 }

다음에 의해서 참조됨 : Initialize().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ RegisterGlobalAutoWireHandlerOnce()

void Dreamine.MVVM.Wpf.DreamineAppBuilder.RegisterGlobalAutoWireHandlerOnce ( )
inlinestatic

WPF FrameworkElement Loaded 이벤트의 전역 ViewModel 자동 주입 핸들러를 한 번만 등록합니다.

DreamineAppBuilder.cs 파일의 197 번째 라인에서 정의되었습니다.

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 }

다음을 참조함 : _globalAutoWireHandlerRegistered, AttachViewModelIfExists(), SyncRoot.

다음에 의해서 참조됨 : Initialize().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ RegisterNavigatorFromWindow()

void Dreamine.MVVM.Wpf.DreamineAppBuilder.RegisterNavigatorFromWindow ( Window window,
string regionName )
inlinestatic

지정한 Window 내부에서 RegionName이 일치하는 ContentControl을 찾아 INavigator를 등록합니다.

매개변수
windowRegion을 찾을 대상 Window입니다.
regionNameRegion 이름입니다.
예외
ArgumentException입력 인자가 유효하지 않은 경우 발생합니다.

DreamineAppBuilder.cs 파일의 300 번째 라인에서 정의되었습니다.

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 }

다음에 의해서 참조됨 : RegisterAutoNavigatorHandlerOnce().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ _autoNavigatorHandlerRegistered

bool Dreamine.MVVM.Wpf.DreamineAppBuilder._autoNavigatorHandlerRegistered
staticprivate

auto Navigator Handler Registered 값을 보관합니다.

DreamineAppBuilder.cs 파일의 50 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : RegisterAutoNavigatorHandlerOnce().

◆ _globalAutoWireHandlerRegistered

bool Dreamine.MVVM.Wpf.DreamineAppBuilder._globalAutoWireHandlerRegistered
staticprivate

global Auto Wire Handler Registered 값을 보관합니다.

DreamineAppBuilder.cs 파일의 41 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : RegisterGlobalAutoWireHandlerOnce().

◆ SyncRoot

readonly object Dreamine.MVVM.Wpf.DreamineAppBuilder.SyncRoot = new()
staticprivate

Sync Root 값을 보관합니다.

DreamineAppBuilder.cs 파일의 32 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : RegisterAutoNavigatorHandlerOnce(), RegisterGlobalAutoWireHandlerOnce().


이 클래스에 대한 문서화 페이지는 다음의 파일로부터 생성되었습니다.: