Ich habe eine Klasse, die zu einem Internet Service ruft einige Daten zu erhalten:programmatisch eine Abhängigkeit in Schloss Windsor ändern
public class MarketingService
{
private IDataProvider _provider;
public MarketingService(IDataProvider provider)
{
_provider = provider;
}
public string GetData(int id)
{
return _provider.Get(id);
}
}
Zur Zeit habe ich zwei Anbieter: HttpDataProvider und FileDataProvider. Normalerweise werde ich an den HttpDataProvider anschließen, aber wenn der externe Webdienst fehlschlägt, möchte ich das System ändern, um an den FileDataProvider zu binden. Etwas wie:
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;
}
Also, wenn diese alle zukünftigen Instanzen von Marketingservice ausgeführt wurde, wird automatisch auf die FileDataProvider verdrahtet werden. Weiß jemand, wie man eine Windsor-Bindung im laufenden Betrieb ändert?
Wir haben diese Implementierung mit Erfolg verwendet, aber unsere Top-Threads arbeiteten mit dem Wörterbuch, also änderten wir es in ein ConcurrentDictionary, um es wie hier empfohlen threadsicher zu machen: https://blogs.msdn.microsoft.com/tess/2009/12/21/high-cpu-im-netz-app-using-a-static-generic-dictionary / – Calum