2013-06-16 8 views
13

Bei der Verwendung von Enterprise Library 6.0 tritt dieser Fehler im Code unter Verwendung: "Muss eine ExceptionManager in der ExceptionPolicy Klasse mit der SetExceptionManager Methode gesetzt"Wie Exception-Manager Enterprise Library 6.0

bool rethrow = ExceptionPolicy.HandleException(ex, "ReplacePolicy1") 

in Enterprise Library 5.0 dieser Code gearbeitet:

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; 
} 

Aber in Enterprise Library 6.0 die EnterpriseLibraryContainer Klasse nicht gefunden wird. Ich möchte Instanz von ExceptionManager erhalten. Wie löse ich dieses Problem?

+3

„Die meisten, wenn nicht alle der Enterprise Library-Klassen werden nicht mehr gepflegt“ - ich bin kein Fan von EntLib, aber ich denke nicht, dass diese Aussage korrekt ist - siehe http://msdn.microsoft.com/en-us/library/ff648951.aspx – Joe

+1

Das Enterprise Library-Team lehnte den Caching-, Cryptography- und Security-Block in der neuen Enterprise Library ab 6. Sie haben dies getan, da sie das Gefühl hatten, dass das .NET Framework viele der gleichen Funktionen jetzt standardmäßig unterstützt. Sie haben ein paar neue Blöcke einschließlich Semantic Logging hinzugefügt (was sehr praktisch ist). Enterprise Library wird als Open Source auf entlib.codeplex.com gepflegt und ist definitiv nicht zurückgezogen. –

Antwort

16

EnterpriseLibraryContainer für die Freigabe der Enterprise Library entfernt wurde 6. Es gibt einen neuen Ansatz, um die Applikationsblöcke in Enterprise Library für Bootstrapping 6. Wenn Sie eine Instanz von ExceptionManager erhalten möchten Sie die Fabrik verwenden können:

IConfigurationSource config = ConfigurationSourceFactory.Create(); 
ExceptionPolicyFactory factory = new ExceptionPolicyFactory(config); 

ExceptionManager exManager = factory.CreateManager(); 

um die Blöcke zu konfigurieren, dass die statischen Fassaden verwenden Sie die SetExceptionManager Methode verwenden können und die ExceptionManager von oben liefern:

ExceptionPolicy.SetExceptionManager(factory.CreateManager()); 

Dies muss nur einmal bei Programmstart durchgeführt werden oben.

+0

Ich habe diesen Code kopiert, aber ich bekomme eine Ausnahme in der 3. Zeile, wenn der factory.CreateManager() ausgeführt wird. Die Ausnahmebedingungsnachricht lautet: "Sie müssen einen ExceptionManager in der ExceptionPolicy-Klasse mit der SetExceptionManager-Methode festlegen." Irgendwelche Ideen zur Lösung? – Philippe

+1

Diese Nachricht wird nur beim Aufruf von 'ExceptionPolicy.HandleException' ausgegeben. Wenn Sie die statische Fassade verwenden, müssen Sie 'ExceptionPolicy.SetExceptionManager (factory.CreateManager());' einmal beim Start der Anwendung (oder kurz bevor der Ausnahmebehandlungscode ausgeführt wird) aufrufen. Wenn Sie immer noch Probleme haben, ist es am besten, eine neue Frage mit den Besonderheiten Ihres Problems (Code, Konfiguration, etc.) zu posten. –

+0

Vielen Dank für Ihre Antwort. Ich habe gerade herausgefunden, dass dies nur ein Problem in den WCF-Servicebibliotheken ist. Wenn ich den Code in das HTTP-Hosting-Projekt verschiebe, verschwindet das Problem. Der einzige Nachteil ist, dass ich nicht die WCF-Ausnahme Abschirmung beim Debuggen mit WcfSvhHost.exe auf der Bibliothek direkt ausüben. Keine große Sache. – Philippe

1

Ich habe auch dieses Problem konfrontiert und jetzt habe ich das gelöst. So können Sie auch versuchen, den folgenden Code in den Application_Start() in der Global.asax Datei zu setzen:

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()); 
Verwandte Themen