C# 将企业库5迁移到6

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升级到6.0,我遇到了一些麻烦。也许这会帮助别人

以下配置是(静默)异常记录到数据库的示例:


我在版本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");