您必须加载/注册您的模块。您可以通过多种方式做到这一点。
注册/加载代码
在bootstrapper.cs
:
protected override void ConfigureModuleCatalog()
{
Type ModuleAType = typeof(ModuleAModule);
ModuleCatalog.AddModule(new ModuleInfo()
{
ModuleName = moduleAType.Name,
ModuleType = moduleAType.AssemblyQualifiedName,
InitializationMode = InitializationMode.WhenAvailable
});
}
从目录注册/加载
在bootstrapper.cs
:
protected override IModuleCatalog CreateModuleCatalog()
{
return new DirectoryModuleCatalog() { ModulePath = @".\Modules" };
}
在 bin\Debug 目录中创建Modules
目录并将ModuleA.dll
文件复制/粘贴到此目录。
在ModuleAModulle.cs
你可以定义模块名称和初始化方法:
[Module(ModuleName="ModuleA", OnDemand=true)]
public class ModuleAModule : IModule
{
public void Initialize()
{
throw new NotImplementedException();
}
}
从 XAML 文件注册/加载
将新的资源字典添加到您的 shell 项目并将构建操作设置为资源。(在这个例子中它被称为XamlCatalog.xaml
)
<Modularity:ModuleCatalog
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Modularity="clr-namespace:Microsoft.Practices.Prism.Modularity;assembly=Microsoft.Practices.Prism">
<Modularity:ModuleInfo Ref="file://ModuleA.dll" ModuleName="ModuleA" ModuleType="ModuleA.ModuleAModule, ModuleA, Version=1.0.0.0" InitializationMode="WhenAvailable" />
</Modularity:ModuleCatalog>
在bootstrapper.cs
:
protected override IModuleCatalog CreateModuleCatalog()
{
return Microsoft.Practices.Prism.Modularity.ModuleCatalog.CreateFromXaml(
new Uri("/ProjectNameHere;component/XamlCatalog.xaml", UriKind.Relative));
}
不要忘记将ModuleA.dll
文件复制/粘贴到项目的根目录,因为您在XamlCatalog.xaml
文件中引用它。
从 App.config 文件注册/加载
在bootstrapper.cs
:
protected override IModuleCatalog CreateModuleCatalog()
{
return new ConfigurationModuleCatalog();
}
在“App.config”中:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="modules" type="Prism.Modularity.ModulesConfigurationSection, Prism.Wpf"/>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<modules>
<module assemblyFile="Modules/ProjectNameHere.ModuleA.dll" moduleType="ProjectNameHere.ModuleA.ModuleAModule, ProjectNameHere.ModuleA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" moduleName="ModuleA" startupLoaded="true" />
<module assemblyFile="Modules/ProjectNameHere.ModuleB.dll" moduleType="ProjectNameHere.ModuleB.ModuleBModule, ProjectNameHere.ModuleB, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" moduleName="ModuleB" startupLoaded="true" />
<module assemblyFile="Modules/ProjectNameHere.ModuleC.dll" moduleType="ProjectNameHere.ModuleC.ModuleCModule, ProjectNameHere.ModuleC, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" moduleName="ModuleC" startupLoaded="true" />
</modules>
</configuration>
我从 Pluralsight 的Prims Introduction 课程中获得了这些信息。