我有一个带有两个模块的 Prism Shell。一个模块应该是主应用程序模拟,MainAppMock
而另一个模块应该是主系统用作区域的任何模块,ModuleOne
. 可能是一个,可能是一百万个模块。
问题在于了解 Prism 的工作原理。除非我在文件中调用它的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
上面提到的命名空间,它工作正常。