0

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注:上記のように名前空間を削除すると正常に動作します。

4

2 に答える 2