使用Enterprise Library 6.0时,以下代码中会出现此错误:
bool rethrow = ExceptionPolicy.HandleException(ex, "ReplacePolicy1")
“必须使用SetExceptionManager方法在ExceptionPolicy类中设置ExceptionManager。”
在Enterprise Library 5.0中,此代码有效:
public static bool HandleException(Exception exception, string PolicyName)
{
ExceptionManager exManager = EnterpriseLibraryContainer.Current.GetInstance<ExceptionManager>();
ExceptionPolicy.SetExceptionManager(exManager);
bool rethrow = ExceptionPolicy.HandleException(ex, "ReplacePolicy1");
return reThrow;
}
但是在Enterprise Library 6.0中找不到EnterpriseLibraryContainer类。 我想要获取ExceptionManager的实例。 我该如何解决这个问题?
答案 0 :(得分:19)
ExceptionManager
的实例,可以使用工厂:
IConfigurationSource config = ConfigurationSourceFactory.Create();
ExceptionPolicyFactory factory = new ExceptionPolicyFactory(config);
ExceptionManager exManager = factory.CreateManager();
要配置块以使用静态外观,可以使用SetExceptionManager方法并从上面提供ExceptionManager:
ExceptionPolicy.SetExceptionManager(factory.CreateManager());
这只需要在应用程序启动时完成一次。
答案 1 :(得分:3)
我也遇到过这个问题,现在我已经解决了这个问题。因此,您还可以尝试在Application_Start()
文件的Global.asax
中设置以下代码:
IConfigurationSource configurationSource = ConfigurationSourceFactory.Create();
DatabaseFactory.SetDatabaseProviderFactory(new DatabaseProviderFactory());
if (configurationSource.GetSection(LoggingSettings.SectionName) != null)
Logger.SetLogWriter(new LogWriterFactory(configurationSource).Create());
ExceptionPolicy.SetExceptionManager(new ExceptionPolicyFactory(configurationSource).CreateManager());
答案 2 :(得分:0)
如果要在布尔变量中获取HandleException,则必须仅访问ExceptionManager。
exManager.HandleException(ex, "ReplacePolicy1");
这是示例示例:
public static bool HandleException(Exception exception, string PolicyName)
{
IConfigurationSource config = ConfigurationSourceFactory.Create();
ExceptionPolicyFactory factory = new ExceptionPolicyFactory(config);
ExceptionManager exManager = factory.CreateManager();
ExceptionPolicy.SetExceptionManager(factory.CreateManager());
bool rethrow = exManager.HandleException(ex, "ReplacePolicy1");
return rethrow;
}