Mam klasa, która zwraca się do serwisu internetowego, aby uzyskać pewne dane:programowo zmienić zależność w zamku Windsor
public class MarketingService
{
private IDataProvider _provider;
public MarketingService(IDataProvider provider)
{
_provider = provider;
}
public string GetData(int id)
{
return _provider.Get(id);
}
}
Obecnie mam dwóch dostawców: HttpDataProvider i FileDataProvider. Zazwyczaj podłączę się do HttpDataProvider, ale jeśli zewnętrzna usługa internetowa zawiedzie, chciałbym zmienić system tak, aby wiązał się z FileDataProvider. Coś jak:
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;
}
Więc kiedy ten został zawartej wszystkich przyszłych wystąpień MarketingService zostanie automatycznie podłączony do FileDataProvider. Czy ktoś wie, jak zmienić wiązanie Windsor w locie?
Korzystaliśmy z tej implementacji z powodzeniem, jednak nasze najbardziej zajmujące wątki działały ze słownikiem, więc zmieniliśmy ją na ConcurrentDictionary, aby była bezpieczna dla wątków zgodnie z zaleceniami tutaj: https://blogs.msdn.microsoft.com/tess/2009/12/21/high-cpu-in-net-app-using-a-static-generic-dictionary / – Calum