C# Silverlight Prism无法解析加载的模块,但并非总是如此
我正在使用prism 4.1和mef来开发前台应用程序,我遇到了一些问题。有时在模块加载过程中,应用程序会异常失败 无法加载文件或程序集“Sl.Common.Model,版本=1.0.0.0,区域性=中性, PublicKeyToken=null”或其依赖项之一。找不到指定的文件 模块具有依赖性(AuditModule和LoaderModule依赖于CommonModule)C# Silverlight Prism无法解析加载的模块,但并非总是如此,c#,silverlight,prism,C#,Silverlight,Prism,我正在使用prism 4.1和mef来开发前台应用程序,我遇到了一些问题。有时在模块加载过程中,应用程序会异常失败 无法加载文件或程序集“Sl.Common.Model,版本=1.0.0.0,区域性=中性, PublicKeyToken=null”或其依赖项之一。找不到指定的文件 模块具有依赖性(AuditModule和LoaderModule依赖于CommonModule) 我们发现,您还必须将模块中的任何引用添加到入口点项目中 因此,如果您在AuditModule中引用Microsoft.P
我们发现,您还必须将模块中的任何引用添加到入口点项目中
因此,如果您在
AuditModule
中引用Microsoft.Practices.Prism.UnityExtensions
(例如)然后,您还需要将对它的引用添加到MainProject
中,即使它没有被MainProject
中的任何代码直接引用,我们发现您也必须将模块中的任何引用添加到入口点项目中
因此,如果您在
AuditModule
中引用Microsoft.Practices.Prism.UnityExtensions
(例如),那么您也需要在MainProject
中添加对它的引用,即使它没有被MainProject
中的任何代码直接引用,谢谢。我在启动应用程序中使用了引用CommonModule。但是它以前是怎么工作的呢?谢谢你。我在启动应用程序中使用了引用CommonModule。但它以前是怎么工作的呢?
<Modularity:ModuleCatalog xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:Modularity="clr-namespace:Microsoft.Practices.Prism.Modularity;assembly=Microsoft.Practices.Prism">
<!-- language: lang-xml -->
<Modularity:ModuleInfo Ref="Sl.Common.Model.xap" InitializationMode="WhenAvailable" ModuleName="CommonModule"/>
<Modularity:ModuleInfo Ref="Sl.Loaders.xap" ModuleName="LoadersModule">
<Modularity:ModuleInfo.DependsOn>
<sys:String>CommonModule</sys:String>
</Modularity:ModuleInfo.DependsOn>
</Modularity:ModuleInfo>
<Modularity:ModuleInfo Ref="Sl.Audit.xap" ModuleName="AuditModule">
<Modularity:ModuleInfo.DependsOn>
<sys:String>CommonModule</sys:String>
</Modularity:ModuleInfo.DependsOn>
</Modularity:ModuleInfo>
</Modularity:ModuleCatalog>
public class Bootstrapper : MefBootstrapper
{
private const string ModuleCatalogUri = "/ModerationSlUserInteface;component/ModulesCatalog.xaml";
protected override void ConfigureAggregateCatalog()
{
base.ConfigureAggregateCatalog();
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(Bootstrapper).Assembly));
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(StackPanelRegionAdapter).Assembly));
}
protected override IModuleCatalog CreateModuleCatalog()
{
var catalog = Microsoft.Practices.Prism.Modularity.ModuleCatalog.CreateFromXaml(new Uri(ModuleCatalogUri, UriKind.Relative));
return catalog;
}
protected override DependencyObject CreateShell()
{
return this.Container.GetExportedValue<Shell>();
}
protected override void InitializeShell()
{
//base.InitializeShell();
Application.Current.RootVisual = (UIElement)this.Shell;
}
protected override RegionAdapterMappings ConfigureRegionAdapterMappings()
{
RegionAdapterMappings mappings = base.ConfigureRegionAdapterMappings();
var stackPanelAdapterInstance = ServiceLocator.Current.GetInstance<StackPanelRegionAdapter>();
mappings.RegisterMapping(typeof(StackPanel), stackPanelAdapterInstance);
return mappings;
}
}
[Export]
public partial class Shell : UserControl, IPartImportsSatisfiedNotification
{
private const string LoadersModuleName = "LoadersModule";
private static Uri LoadersViewUri = new Uri("/LoadersView", UriKind.Relative);
public Shell()
{
this.InitializeComponent();
}
[Import(AllowRecomposition = false)]
public IModuleManager ModuleManager;
[Import(AllowRecomposition = false)]
public IRegionManager RegionManager;
public void OnImportsSatisfied()
{
this.ModuleManager.LoadModuleCompleted += (s, e) =>
{
if (e.ModuleInfo.ModuleName == LoadersModuleName)
{
this.RegionManager.RequestNavigate(RegionNames.MainRegion, LoadersViewUri);
}
};
}
}