C# 将企业库5迁移到6
试图从5.0升级到6.0,我遇到了一些麻烦。也许这会帮助别人 以下配置是(静默)异常记录到数据库的示例:C# 将企业库5迁移到6,c#,asp.net-mvc,logging,exception-handling,enterprise-library,C#,Asp.net Mvc,Logging,Exception Handling,Enterprise Library,试图从5.0升级到6.0,我遇到了一些麻烦。也许这会帮助别人 以下配置是(静默)异常记录到数据库的示例: 我在版本5.0.414.0中使用以下程序集: Microsoft.Practices.EnterpriseLibrary.ExceptionHandling Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging Microsoft.Practices.EnterpriseLibrary.Logging Micros
我在版本5.0.414.0中使用以下程序集:
Microsoft.Practices.EnterpriseLibrary.ExceptionHandling
Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.Logging
Microsoft.Practices.EnterpriseLibrary.Logging
Microsoft.Practices.EnterpriseLibrary.Logging.Database
对于Enterprise Library 5.0,在asp.net MVC应用程序中使用所有这些功能非常简单:
// ...
catch (Exception ex)
{
if (ExceptionPolicy.HandleException(ex, "UiPolicy")) throw;
// do something else
}
将程序集升级到Enterprise Library 6.0后,我收到以下异常消息:
必须使用SetExceptionManager方法在ExceptionPolicy类中设置ExceptionManager
那么,该怎么办呢?一步一步来
要消除此异常(归功于),必须使用ExceptionManager
,在我的例子中是通过factory。我在global.asax'Application\u Start()
方法中使用此选项:
protected void Application_Start()
{
IConfigurationSource source = ConfigurationSourceFactory.Create();
var exceptionPolicyFactory = new ExceptionPolicyFactory(source);
var exceptionManager = exceptionPolicyFactory.CreateManager();
ExceptionPolicy.SetExceptionManager(exceptionManager);
}
但对于我的处理和日志设置来说,这仅仅是一半。我现在在exceptionPolicyFactory.CreateManager()上得到了以下异常
尚未为Logger静态类设置LogWriter。调用Logger.SetLogWriter方法设置它
为了让这一切消失,我补充道
var logwriterFactory = new LogWriterFactory(source);
var logWriter = logwriterFactory.Create();
Logger.SetLogWriter(logWriter);
现在它说
未为静态DatabaseFactory设置数据库提供程序工厂。通过调用DatabaseFactory.SetProviderFactory方法或通过调用DatabaseFactory.SetDatabases方法指定自定义映射来设置提供程序工厂
在logwriterFactory.Create()
上。因此,还有一件事需要补充:
DatabaseFactory.SetDatabaseProviderFactory(new DatabaseProviderFactory(source));
完全解
总之,我的应用程序\u Start()
现在是
protected void Application_Start()
{
IConfigurationSource source = ConfigurationSourceFactory.Create();
DatabaseFactory.SetDatabaseProviderFactory(new DatabaseProviderFactory(source));
var logwriterFactory = new LogWriterFactory(source);
var logWriter = logwriterFactory.Create();
Logger.SetLogWriter(logWriter);
var exceptionPolicyFactory = new ExceptionPolicyFactory(source);
var exceptionManager = exceptionPolicyFactory.CreateManager();
ExceptionPolicy.SetExceptionManager(exceptionManager);
}
虽然配置和实际异常处理代码保持不变:
ExceptionPolicy.HandleException(exceptionToHandle, "UiPolicy");