ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [DX_WPF] Dynamic Module Project Create
    DevExpress/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/%EA%B8%B0%ED%83%80-%EC%9E%91%EC%97%85-%EC%8A%A4%EC%BC%80%EC%A4%84%EB%9F%AC

     

    #####  시작위치가 설정되어 있으면 정상 작동. ####

     

     

     


     

     

    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.nupkg
    0.01MB
    DXDynamicModule.2.2.2.nupkg
    0.01MB
    DXDynamicModule.2.2.4.nupkg
    0.01MB

     

     

     

    Container 전달.

     

    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

    댓글

Designed by Tistory.