2 つのモジュールを備えた Prism Shell があります。1 つのモジュールはメイン アプリケーションのモックであると想定され、もう 1 つのモジュールはMainAppMock
、メイン システムが領域として使用しているモジュールであると想定されますModuleOne
。1 つかもしれないし、100 万モジュールかもしれません。
問題は、プリズムがどのように機能するかを理解することです。ファイルで名前空間を呼び出さない限り、MainAppModule
正しく初期化されBootstrapper
MainWindow.xaml
ます。
私の質問:これは、その名前空間を呼び出しているときに実行時にモジュールを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()
{
}
}
問題はここにあります。でBootstrapper
MainWindow
:
<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>
mainAppMock
注:上記のように名前空間を削除すると正常に動作します。