【发布时间】:2016-03-28 00:52:07
【问题描述】:
我有一个带有两个模块的 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()
{
}
}
问题就在这里。在BootstrapperMainWindow:
<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 命名空间,它会正常工作。
【问题讨论】: