teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

見直しキャンペーン中

2023/07/27 13:55

投稿

TN8001
TN8001

スコア10108

answer CHANGED
@@ -1,72 +1,72 @@
1
- > どうやったら動的にロードしたViewをリージョンマネージャーでナビゲートできるかという質問でした。
2
-
3
- モジュールについて調べていただけたのか甚だ疑問ですが、どうしても`CreateInstance`したいということでしょうか?
4
- モジュールにはその辺の機能もありますしロード方法も選べるのですが。
5
-
6
- 何か事情があるとして(特別な事情は質問に書いてください)提示の方法でやってみます。
7
- `Prism`はコードが膨れがちでお互い説明や再現するのも大変なので、テンプレートをベースにします。
8
-
9
- 入っていると思いますが[Prism Template Pack](https://marketplace.visualstudio.com/items?itemName=BrianLagunas.PrismTemplatePack)の`Prism Full App(.NET Core)`で、新規にソリューションを作ります。
10
-
11
- テストを含めてプロジェクト6つの、ゴツめのソリューションが生成されます。
12
- すでにモジュールを使うようになっていますが、あえて使わないようにします。
13
-
14
- 1. `FullApp1`をスタートアッププロジェクトにして実行し、どのようなウィンドウが出るのか確認する
15
- 1. `FullApp1.Modules.ModuleName.ModuleNameModule`を削除なりコメント化する
16
- 1. `ModuleNameModule`の使用箇所、`FullApp1.App.ConfigureModuleCatalog`を削除なりコメント化する
17
- 1. 一度ソリューションをリビルドする
18
- 1. `FullApp1`プロジェクトから、`FullApp1.Modules.ModuleName`の参照を切る
19
- 1. `FullApp1.Modules.ModuleName.dll`を、出力ディレクトリを変えるなり手でコピーするなりで`FullApp1.exe`と同じフォルダに配置する
20
- 1. `FullApp1.App`を下記に書き換える
21
-
22
- ```C#
23
- using FullApp1.Core;
24
- using FullApp1.Services;
25
- using FullApp1.Services.Interfaces;
26
- using FullApp1.Views;
27
- using Prism.Ioc;
28
- using Prism.Regions;
29
- using System.Reflection;
30
- using System.Windows;
31
-
32
- namespace FullApp1
33
- {
34
- public partial class App
35
- {
36
- protected override Window CreateShell()
37
- {
38
- return Container.Resolve<MainWindow>();
39
- }
40
-
41
- protected override void RegisterTypes(IContainerRegistry containerRegistry)
42
- {
43
- containerRegistry.RegisterSingleton<IMessageService, MessageService>();
44
-
45
- var oAssembly = Assembly.LoadFrom(@".\FullApp1.Modules.ModuleName.dll");
46
- var oClass = oAssembly.CreateInstance("FullApp1.Modules.ModuleName.Views.ViewA");
47
- containerRegistry.RegisterInstance(oClass, "ViewA");
48
- }
49
-
50
- //protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
51
- //{
52
- // moduleCatalog.AddModule<ModuleNameModule>();
53
- //}
54
-
55
- protected override void OnInitialized()
56
- {
57
- base.OnInitialized();
58
-
59
- var regionManager = Container.Resolve<IRegionManager>();
60
- regionManager.RequestNavigate(RegionNames.ContentRegion, "ViewA");
61
- }
62
- }
63
- }
64
- ```
65
-
66
- では実行します。初めに実行したときと同じになったでしょうか?
67
-
68
- `RequestNavigate`のタイミングが難しいというか、早すぎると出ないことはありました(よくわかっていません^^;
69
-
70
- > VMの使いまわし方
71
-
1
+ > どうやったら動的にロードしたViewをリージョンマネージャーでナビゲートできるかという質問でした。
2
+
3
+ モジュールについて調べていただけたのか甚だ疑問ですが、どうしても`CreateInstance`したいということでしょうか?
4
+ モジュールにはその辺の機能もありますしロード方法も選べるのですが。
5
+
6
+ 何か事情があるとして(特別な事情は質問に書いてください)提示の方法でやってみます。
7
+ Prismはコードが膨れがちでお互い説明や再現するのも大変なので、テンプレートをベースにします。
8
+
9
+ 入っていると思いますが[Prism Template Pack](https://marketplace.visualstudio.com/items?itemName=BrianLagunas.PrismTemplatePack)の`Prism Full App(.NET Core)`で、新規にソリューションを作ります。
10
+
11
+ テストを含めてプロジェクト6つの、ゴツめのソリューションが生成されます。
12
+ すでにモジュールを使うようになっていますが、あえて使わないようにします。
13
+
14
+ 1. `FullApp1`をスタートアッププロジェクトにして実行し、どのようなウィンドウが出るのか確認する
15
+ 1. `FullApp1.Modules.ModuleName.ModuleNameModule`を削除なりコメント化する
16
+ 1. `ModuleNameModule`の使用箇所、`FullApp1.App.ConfigureModuleCatalog`を削除なりコメント化する
17
+ 1. 一度ソリューションをリビルドする
18
+ 1. `FullApp1`プロジェクトから、`FullApp1.Modules.ModuleName`の参照を切る
19
+ 1. `FullApp1.Modules.ModuleName.dll`を、出力ディレクトリを変えるなり手でコピーするなりで`FullApp1.exe`と同じフォルダに配置する
20
+ 1. `FullApp1.App`を下記に書き換える
21
+
22
+ ```cs
23
+ using FullApp1.Core;
24
+ using FullApp1.Services;
25
+ using FullApp1.Services.Interfaces;
26
+ using FullApp1.Views;
27
+ using Prism.Ioc;
28
+ using Prism.Regions;
29
+ using System.Reflection;
30
+ using System.Windows;
31
+
32
+ namespace FullApp1
33
+ {
34
+ public partial class App
35
+ {
36
+ protected override Window CreateShell()
37
+ {
38
+ return Container.Resolve<MainWindow>();
39
+ }
40
+
41
+ protected override void RegisterTypes(IContainerRegistry containerRegistry)
42
+ {
43
+ containerRegistry.RegisterSingleton<IMessageService, MessageService>();
44
+
45
+ var oAssembly = Assembly.LoadFrom(@".\FullApp1.Modules.ModuleName.dll");
46
+ var oClass = oAssembly.CreateInstance("FullApp1.Modules.ModuleName.Views.ViewA");
47
+ containerRegistry.RegisterInstance(oClass, "ViewA");
48
+ }
49
+
50
+ //protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
51
+ //{
52
+ // moduleCatalog.AddModule<ModuleNameModule>();
53
+ //}
54
+
55
+ protected override void OnInitialized()
56
+ {
57
+ base.OnInitialized();
58
+
59
+ var regionManager = Container.Resolve<IRegionManager>();
60
+ regionManager.RequestNavigate(RegionNames.ContentRegion, "ViewA");
61
+ }
62
+ }
63
+ }
64
+ ```
65
+
66
+ では実行します。初めに実行したときと同じになったでしょうか?
67
+
68
+ `RequestNavigate`のタイミングが難しいというか、早すぎると出ないことはありました(よくわかっていません^^;
69
+
70
+ > VMの使いまわし方
71
+
72
72
  それこそ`RegisterInstance`や`RegisterSingleton`等、好きに登録したらいいんじゃないですか?