2013-06-16 10 views
13

Podczas korzystania Enterprise Library 6.0, ten błąd występuje w kodzie poniżej: "musi dawać ExceptionManager w klasie ExceptionPolicy stosując metodę SetExceptionManager"Jak korzystać Wyjątek Manager Enterprise Library 6.0

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

W Enterprise Library 5.0 ten kod działa:

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

Ale w Enterprise Library 6.0 Klasa EnterpriseLibraryContainer nie znaleziono. Chcę uzyskać wystąpienie ExceptionManager. Jak rozwiązać ten problem?

+3

„większość, jeśli nie wszystkie, z klasy Enterprise Library nie są utrzymywane” - nie jestem fanem EntLib, ale nie sądzę, że to oświadczenie jest dokładne - zobacz http://msdn.microsoft.com/en-us/library/ff648951.aspx – Joe

+1

Zespół biblioteki korporacyjnej wycofał blokowanie pamięci podręcznej, kryptografii i zabezpieczeń w nowej bibliotece korporacyjnej 6. Zrobili to, ponieważ poczuli, że system .NET Framework obsługuje wiele z tych samych funkcji, które są już gotowe do użycia. Dodali kilka nowych bloków, w tym Semantic Logging (który jest bardzo przydatny). Biblioteka korporacyjna jest utrzymywana jako open source na stronie entlib.codeplex.com i zdecydowanie nie jest wycofywana. –

Odpowiedz

16

EnterpriseLibraryContainer została usunięta wydaniu Enterprise Library 6. Jest to nowe podejście do ładowanie początkowe bloków aplikacji w Enterprise Library 6. Jeśli chcesz uzyskać instancję ExceptionManager można wykorzystać fabryczne:

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

ExceptionManager exManager = factory.CreateManager(); 

aby skonfigurować bloki używać statycznych fasady można użyć metody SetExceptionManager i dostarczyć ExceptionManager z góry:

ExceptionPolicy.SetExceptionManager(factory.CreateManager()); 

To musi być zrobione tylko raz przy starcie aplikacji w górę.

+0

Skopiowałem ten kod, ale otrzymuję wyjątek w trzeciej linii, gdy wykonywany jest proces factory.CreateManager(). Komunikat wyjątku: "Musi ustawić ExceptionManager w klasie ExceptionPolicy za pomocą metody SetExceptionManager." Wszelkie pomysły na rozwiązanie tego problemu? – Philippe

+1

Ta wiadomość jest generowana tylko podczas wywoływania 'ExceptionPolicy.HandleException'. Jeśli używasz statycznej elewacji, musisz wywołać 'ExceptionPolicy.SetExceptionManager (factory.CreateManager());' raz podczas uruchamiania aplikacji (lub jakiś czas przed wykonaniem kodu obsługi wyjątku). Jeśli nadal masz problemy, najlepiej zamieścić nowe pytanie ze szczegółami swojego problemu (kod, konfiguracja itp.). –

+0

Dziękuję za odpowiedź. Właśnie dowiedziałem się, eksperymentując, że jest to tylko problem w bibliotekach usług WCF. Po przeniesieniu kodu do projektu hostingu HTTP problem znika. Jedynym minusem jest to, że nie korzystam z osłony wyjątku WCF podczas debugowania za pomocą WcfSvhHost.exe bezpośrednio w bibliotece. Nie ma sprawy. – Philippe

1

Również stanąłem w obliczu tego problemu i teraz to rozwiązałem. Tak, można także spróbować ustawić następujący kod w Application_Start() w pliku 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()); 
Powiązane problemy