Tôi có một lớp học mà các cuộc gọi ra một dịch vụ internet để có được một số dữ liệu:programatically thay đổi phụ thuộc vào Lâu đài Windsor
public class MarketingService
{
private IDataProvider _provider;
public MarketingService(IDataProvider provider)
{
_provider = provider;
}
public string GetData(int id)
{
return _provider.Get(id);
}
}
Hiện nay tôi có hai nhà cung cấp: HttpDataProvider và FileDataProvider. Thông thường tôi sẽ kết nối tới HttpDataProvider nhưng nếu dịch vụ web bên ngoài không thành công, tôi muốn thay đổi hệ thống để liên kết với FileDataProvider. Một cái gì đó như:
public string GetData(int id)
{
string result = "";
try
{
result = GetData(id); // call to HttpDataProvider
}
catch (Exception)
{
// change the Windsor binding so that all future calls go automatically to the
// FileDataProvier
// And while I'm at it, retry against the FileDataProvider
}
return result;
}
Vì vậy, khi điều này đã được thực thi, tất cả các trường hợp tiếp theo của MarketingService sẽ tự động được kết nối với FileDataProvider. Có ai biết làm thế nào để thay đổi một ràng buộc Windsor trên bay?
Chúng tôi đã sử dụng triển khai này thành công, tuy nhiên các chủ đề tiêu thụ hàng đầu của chúng tôi đã làm việc với từ điển, vì vậy chúng tôi đã thay đổi nó thành ConcurrentDictionary để làm cho chuỗi đó an toàn như được đề xuất tại đây: https://blogs.msdn.microsoft.com/tess/2009/12/21/cpu-in-net-app-sử dụng-a-static-generic-dictionary / – Calum