Exception handling 使用Wrap处理程序添加其他异常信息

Exception handling 使用Wrap处理程序添加其他异常信息,exception-handling,enterprise-library,Exception Handling,Enterprise Library,Enterprise Library 5.0异常处理包括Wrap处理程序。这会将异常包装到另一个异常中,并引发包装异常 我想向我的包装器异常添加额外的信息,例如一些关于发生错误时生效的参数和设置的信息。这对于故障排除很方便(因为这个包装异常将被更高级别的处理程序捕获并记录) 我使用了以下代码: ExceptionManager em = EnterpriseLibraryContainer.Current.GetInstance<ExceptionManager>(); em.Pro

Enterprise Library 5.0异常处理包括Wrap处理程序。这会将异常包装到另一个异常中,并引发包装异常

我想向我的包装器异常添加额外的信息,例如一些关于发生错误时生效的参数和设置的信息。这对于故障排除很方便(因为这个包装异常将被更高级别的处理程序捕获并记录)

我使用了以下代码:

ExceptionManager em = EnterpriseLibraryContainer.Current.GetInstance<ExceptionManager>();
em.Process(() => { DoSomething(); }, "WrapPolicy");
ExceptionManager em=EnterpriseLibraryContainer.Current.GetInstance();
em.Process(()=>{DoSomething();},“WrapPolicy”);
结果是一个异常被包装在我的自定义异常中并抛出。这是干净和简单的,但由于我的代码从未看到包装器异常实例,因此我无法使用其他信息对其进行扩充


除了在传统的Try…Catch中包装操作并手动执行HandleException方法外,是否有其他方法将附加信息注入包装异常实例

配置包装处理程序时,可以提供异常消息

    var builder = new ConfigurationSourceBuilder();

    builder.ConfigureExceptionHandling()
               .GivenPolicyWithName("MyPolicy")
               .ForExceptionType<NullReferenceException>()
                 .WrapWith<InvalidOperationException>()
                   .UsingMessage(messageBasedOnSomeRuntimeInfo)
                 .ThenNotifyRethrow();

    var configSource = new DictionaryConfigurationSource();
    builder.UpdateConfigurationWithReplace(configSource);
    EnterpriseLibraryContainer.Current 
          = EnterpriseLibraryContainer.CreateDefaultContainer(configSource);
var builder=new ConfigurationSourceBuilder();
builder.ConfigureExceptionHandling()
.GivenPolicyWithName(“我的保单”)
.ForExceptionType()
.WrapWith()
.UsingMessage(messageBasedOnSomeRuntimeInfo)
.Then notify rethrow();
var configSource=new DictionaryConfigurationSource();
builder.updateConfiguration WithReplace(配置源);
EnterpriseLibraryContainer.Current
=EnterpriseLibraryContainer.CreateDefaultContainer(configSource);

我不确定您要添加什么样的附加信息,但是如果您想保持流程方法的优雅,那么您可以创建一个自定义的WrapHandler,将适当的信息添加到包装异常中。一个好的备选方案是向Exception.Data IDictionary添加附加信息

如果您正在寻找方法参数,那么可能唯一的方法是创建您自己的“上下文”,在其中设置值,并从上下文中提取它们以添加到包装异常


另一个更优雅的方法是使用政策注入。调用处理程序可以访问方法参数以及引发的异常。您可以修改现有的ExceptionCallHandler,将您的信息添加到原始或新异常中。如果将上下文信息添加到原始异常中,则该信息将由异常策略处理(可能包括日志记录)。

这是正确的,而且非常方便。但是我需要添加的是运行时信息,关于错误发生时的条件。我在配置时没有。谢谢,当然。不要使用extrenal配置,而是通过fluent API使用编程。请参阅我修改后的答案中的代码示例。谢谢,但我所说的“运行时”是指“异常发生时”。因此,提前设置消息并不能反映这一点。但是,谢谢你的回答!你不必提前设置。这可能是一个计算值。我的问题是,定制包装商如何访问我想要包含的信息。假设处理异常的方法有一些有意义的参数,我想将这些参数与异常关联。间接调用的处理程序和几层代码是如何访问这些处理程序的?(阅读了修改后的答案)谢谢。这是我没有考虑过的方法!