我有一些棱镜工作。特别是,一个调用InitializeModules的引导程序(MefBootstrapper)。在其中一个模块中,引发了一个异常,当我重新抛出该异常时,我得到了未处理的异常。
未成功,我已将委托方法添加到异常事件中,例如:
AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
System.Windows.Application.Current.DispatcherUnhandledException += CurrentOnDispatcherUnhandledException;
答案 0 :(得分:0)
首先,您需要将异常标记为AppDomain.CurrentDomain.UnhandledException附带的事件处理程序中处理的异常,以防止应用程序崩溃:
Application.Current.Dispatcher.UnhandledException += (sender, e) => e.Handled = true;
第二,在给定的Prism模块初始化期间引发的异常可以阻止其他模块的加载。为了避免这种情况,您可以按如下所示对ModuleManager进行子类化:
public class ErrorHandlingModuleManager : ModuleManager
{
public ErrorHandlingModuleManager(IModuleInitializer moduleInitializer, IModuleCatalog moduleCatalog, ILoggerFacade loggerFacade) : base(moduleInitializer, moduleCatalog, loggerFacade)
{
}
protected override void LoadModulesThatAreReadyForLoad()
{
var initializationExceptions = new List<Exception>();
while (true)
{
try
{
base.LoadModulesThatAreReadyForLoad();
break;
}
catch (ModuleInitializeException e)
{
initializationExceptions.Add(e);
}
catch (Exception e)
{
initializationExceptions.Add(e);
break;
}
}
if (initializationExceptions.Any())
throw new AggregateException(initializationExceptions);
}
}
}
请务必在您的Mef容器中注册ErrorHandlingModuleManager,以覆盖默认值。