2013-06-16 21 views
13

Khi sử dụng Thư viện Enterprise 6.0, lỗi này xảy ra trong các mã dưới đây: "Phải thiết lập một ExceptionManager trong lớp ExceptionPolicy sử dụng phương pháp SetExceptionManager"Làm thế nào để sử dụng Enterprise Library ngoại lệ quản lý 6.0

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

Trong Thư viện Enterprise 5.0 mã này làm việc:

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

Nhưng trong Thư viện Enterprise 6.0 lớp EnterpriseLibraryContainer không được tìm thấy. Tôi muốn có thể hiện của ExceptionManager. Làm cách nào để giải quyết vấn đề này?

+3

"Hầu hết, nếu không phải tất cả, các lớp doanh nghiệp Thư viện không còn duy trì" - Tôi không phải là fan hâm mộ của EntLib, nhưng tôi không nghĩ rằng câu lệnh này là chính xác - hãy xem http://msdn.microsoft.com/en-us/library/ff648951.aspx – Joe

+1

Nhóm Thư viện Doanh nghiệp không còn dùng bộ nhớ đệm, Mật mã và Bảo mật trong Thư viện Doanh nghiệp mới 6. Họ đã làm điều này khi họ cảm thấy rằng các.NET Framework hỗ trợ nhiều tính năng tương tự bây giờ ra khỏi hộp. Họ đã thêm một vài khối mới bao gồm Ghi nhật ký ngữ nghĩa (rất tiện dụng). Thư viện doanh nghiệp được duy trì dưới dạng nguồn mở trên entlib.codeplex.com và chắc chắn nó không được gỡ bỏ. –

Trả lời

16

EnterpriseLibraryContainer đã được gỡ bỏ cho việc phát hành của doanh nghiệp Thư viện 6. Có một cách tiếp cận mới cho bootstrapping các khối ứng dụng trong doanh nghiệp Thư viện 6. Nếu bạn muốn để có được một thể hiện của ExceptionManager bạn có thể sử dụng các nhà máy:

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

ExceptionManager exManager = factory.CreateManager(); 

để cấu hình các khối để sử dụng mặt tiền tĩnh bạn có thể sử dụng phương pháp SetExceptionManager và cung cấp ExceptionManager với phần trên:

ExceptionPolicy.SetExceptionManager(factory.CreateManager()); 

này chỉ cần được thực hiện một lần khi khởi động ứng dụng lên.

+0

Tôi đã sao chép mã này nhưng tôi nhận được ngoại lệ trên dòng thứ 3 khi factory.CreateManager() thực hiện. Thông báo ngoại lệ là: "Phải đặt ExceptionManager trong lớp ExceptionPolicy bằng phương thức SetExceptionManager." Bất kỳ ý tưởng nào về cách giải quyết vấn đề này? – Philippe

+1

Thông điệp đó chỉ được ném khi gọi 'ExceptionPolicy.HandleException'. Nếu bạn đang sử dụng mặt tiền tĩnh thì bạn cần phải gọi 'ExceptionPolicy.SetExceptionManager (factory.CreateManager());' một lần trong khi khởi động ứng dụng (hoặc đôi khi trước khi mã xử lý ngoại lệ của bạn thực thi). Nếu bạn vẫn gặp sự cố thì tốt nhất nên đăng câu hỏi mới với các chi tiết cụ thể về vấn đề của bạn (mã, cấu hình, v.v.). –

+0

Cảm ơn bạn đã phản hồi. Tôi chỉ phát hiện ra bằng cách thử nghiệm rằng đây chỉ là một vấn đề trong thư viện dịch vụ WCF. Khi tôi di chuyển mã vào dự án lưu trữ HTTP, sự cố sẽ biến mất. Sự sụp đổ duy nhất là tôi không thực hiện các ngoại lệ WCF che chắn khi gỡ lỗi bằng cách sử dụng WcfSvhHost.exe trên thư viện trực tiếp. Không phải vấn đề lớn. – Philippe

1

Tôi cũng phải đối mặt với vấn đề này và bây giờ tôi đã giải quyết vấn đề này. Vì vậy, bạn cũng có thể thử thiết lập các mã sau trong Application_Start() trong Global.asax file:

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()); 
Các vấn đề liên quan