を依存関係を変更する私はいくつかのデータを取得するためにインターネットサービスにアウト呼び出すクラスを持っている:HttpDataProviderとFileDataProvider:をプログラム的に城ウィンザーで
public class MarketingService
{
private IDataProvider _provider;
public MarketingService(IDataProvider provider)
{
_provider = provider;
}
public string GetData(int id)
{
return _provider.Get(id);
}
}
現在、私は2つのプロバイダを持っています。通常、私はHttpDataProviderに接続しますが、外部Webサービスが失敗した場合は、FileDataProviderにバインドするようにシステムを変更したいと思います。ような何か:これはMarketingServiceの将来のすべてのインスタンスを実行してきたので、
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;
}
は自動的にFileDataProviderまで配線されます。誰もがその場でウィンザーのバインディングを変更する方法を知っていますか?
私たちはこの実装を成功させましたが、消費量の多いスレッドが辞書で動作していたので、ConcurrentDictionaryに変更してここで推奨されるスレッドセーフにしました:https://blogs.msdn.microsoft.com/tess/2009/12/21/high-cpu-in-net-app-a-static-generic-dictionary / – Calum