-
[DX_WPF] Dynamic Module Project CreateDevExpress/DX_WPF 2024. 1. 26. 14:34
# 이슈
# 동적으로 로드하는 방식을 사용할 때 ex) DevDynamicModule.CreateDevModuleCatalog(); 호출할 때
시작 프로그램에 등록해서 윈도우 시작시 자동시작하는 레지스트리등록해서 사용하면
프로그램이죽는현상이 모듈 로드 안되는 현상 있음.
(죽는 현상은 System.ServiceProcess.ServiceController 문제)
# CMD 로 .exe 실행해도 동일한 증상 있음.
시작프로그램 등록해서 실행도 CMD로 실행하는것과 같은 맥락이라서 동일한 증상인 것으로 추정 됨.
# 시작 메뉴 아이콘 실행해도 동일한 증상 있음. ( 데스크탑 바로가기는 정상)# 이슈 해결
# working directory가 설정되어 있지 않으면 나타나는 현상.
위 이슈 상태에서 실행될때 working directory가 지정되기 전(혹은 안된)상태로 실행 되는 듯.
dll 로드하는 클래스를 타기전에 코드상에서 working directory 를 지정해 줘서 해결 가능.
Environment.CurrentDirectory = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory);
Bootstrapper.Run(); // dll 로드Bootstrapper.Run(); 안의
DevDynamicModule.CreateDevModuleCatalog(modulePath: "./Modules"); 에서 dll 로드 진행.
Module 로드 안 된 비정상 상태
# 시작 메뉴 아이콘 실행해도 동일한 증상 있음.
아이콘(바로가기 등) 실행으로 실행시킨 ( 데스크탑 바로가기)
정상 상태
** 대체방안으로 작업스케줄러에 등록해서 사용하면 가능 **
##### 시작위치가 설정되어 있으면 정상 작동. ####
https://dlsenfl.tistory.com/entry/DXWPF-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0
[DX_WPF] 시작하기 (MDI)
New Solution Project 파일 수정 (Module 동적로드) App.xaml.cs using System; using DevExpress.Mvvm; using DevExpress.Mvvm.ModuleInjection; using DevExpress.Mvvm.UI; using DevExpress.Xpf.Core; using DXModular.Common; using DXModular.Main.Properties; u
dlsenfl.tistory.com
# 프로젝트 생성 절차.
1. WPF 프로젝트 생성.
Dev 템플릿에서 만들어지는 디렉토리에 맞추기 위해 Location에 같은 이름의 디렉토리 경로 하나 더 추가.
.NET 7.0 사용.
=> Class 이름 변경.
2. 프로젝트 설정
=> <ImplicitUsings>enable</ImplicitUsings> 삭제
3. IDynamicModule 추가.
IDynamicModule 은 DXModularWithDynamic.Common에 Package로 참조 되어있음.
같은 솔루션 내 프로젝트면 인텔리젠스로 간단하게 Common 참조.
아래와 같이 인터페이스 참조한 상태면 동적 로드 준비 완료.
4. View&ViewModel 추가
아래 빨간박스 확인하고 추가.
4.1 View
=> 삭제
<UserControl.DataContext>
<ViewModels:ModuleEViewModel/>
</UserControl.DataContext>
4.2 ViewModel
아래와 같이 구성 추가
기본으로 구성되는 Class :ViewModelBase 를 써도 되지만
ViewModelSource 나 ViewModelBase 둘이 동일한 기능. (둘 중 하나만 사용.)
Dev Support QnA
ViewModelSource and ViewModelBase are interchangeable solutions that should not be used together.
5. DevExpress Module 등록 및 주입
Common.Modules 에 모듈 이름 추가.
RegisterModules() 에 등록.
주입이 필요하면
InjectModules() 등록.
Module을 사용하고자 하는 곳에서 Manager를 통해 Navigate해서 사용,
Like~
끝.
DevExpress.MVVM을 사용해서 프로젝트 진행하면 됨.
Ioc Container 추가 버전
ViewModel에 생성자 주입 가능하게~
DXDynamicModule.1.0.6.nupkg0.01MBDXDynamicModule.2.2.2.nupkg0.01MBDXDynamicModule.2.2.4.nupkg0.01MBContainer 전달.
Register<Type>(); 하지 않아도 Type 을 GetInstance해서 가져다 쓸 때 알아서 register
SimpleContainer.Options.ResolveUnregisteredConcreteTypes = true;
기본값은 False;
View.xaml.cs
ViewModel.cs
ViewModel에 생성자 주입이 가능하게 됨.
MainViewModel 을 Ioc Container 로 생성자 주입하려고 할 때
ISupportService 오류나는 현상
MainView.xaml에서 아래 삭제 후
d:DataContext="{dxmvvm:ViewModelSource viewModels:MainViewModel}"
MainViewModel에서 ViewModelBase 상속하면 해결.
728x90'DevExpress > DX_WPF' 카테고리의 다른 글
[DX_WPF] IRegion VisualSerializationMode (0) 2024.02.06 [DX_WPF] Pagination or Infinite Scroll (0) 2024.01.26 [DX_WPF] VisualStateService (0) 2024.01.25 [DX_WPF] POCO View Models (0) 2024.01.24 [DX_WPF] ISupportServices (0) 2024.01.19 댓글