私は2つのモジュールを備えたプリズムシェルを持っています。 1つのモジュールはメインアプリケーションモックMainAppMock
であり、他のモジュールはそのメインシステムが領域として使用しているものであると仮定されています。ModuleOne
。 1つで、百万のモジュールになる可能性があります。WPFプリズムモジュールの初期化
問題は、プリズムの仕組みを理解することです。私がBootstrapper
MainWindow.xaml
ファイルの名前空間と呼ばない限り、MainAppModule
は正しく初期化されます。
私の質問:この名前空間を呼び出すときにモジュールが実行時にロードされているため、既にロードされているためにPrism
がロードされないためですか?実際に何が起こっているのですか?
シェル:
class Bootstrapper : NinjectBootstrapper
{
protected override DependencyObject CreateShell()
{
return Kernel.Get<MainWindow>();
}
protected override void InitializeShell()
{
Application.Current.MainWindow = (Window)Shell;
Application.Current.MainWindow.Show();
}
protected override IModuleCatalog CreateModuleCatalog()
{
return new DirectoryModuleCatalog
{
ModulePath = AppDomain.CurrentDomain.BaseDirectory
};
}
}
MainAppMockとModuleOneは、名前以外は同じです。
ModuleOneクラス:
[Module(ModuleName = "ModuleOne.Module")]
public class Module : IModule
{
private readonly IRegionManager _regionManager;
private readonly IKernel _kernel;
public Module(IRegionManager regionManager, IKernel kernel)
{
_regionManager = regionManager;
_kernel = kernel;
}
public void Initialize()
{
}
}
問題はここにあります。
<Window x:Class="PrismTest.MainWindow"
xmlns:mainAppMock="clr-namespace:MainAppMock;assembly=MainAppMock"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<mainAppMock:MainUserControl />
</Grid>
注:Bootstrapper
MainWindow
では前述したように、私はmainAppMock
名前空間を削除する場合は正常に動作します。
答えの3番目の部分は正しくありません。 Prismは、リージョン内で呼び出されているかどうかにかかわらず、IModuleを実装しているモジュールをロードします。さらに、リージョンは単にModuleクラスではなくビューを呼び出すだけです。 私は自分のモジュールがAppDomain.CurrentDomain.BaseDirectoryに配置されていることをPrismに伝えているので、既に存在していることが分かります。 – AzzamAziz
@AzzamAzizええ、 'Prism'は' CreateModuleCatalog'の中にコードを書くと 'Modules'を読み込みます。しかし、Prismは、 'Module'が' Shell'で 'RegionManager'なしでどこに表示されるべきか分かりません。 – StepUp
私はまだそれを表示しようとしていないので、いいです、私はそれが読み込まれていることを確認しようとしています。問題はそれが表示されていないということではありません。それは読み込まれていないということです。 – AzzamAziz