У меня есть класс, который взывает к услуге Интернет, чтобы получить некоторые данные:изменить программно зависимость в замок Виндзор
public class MarketingService
{
private IDataProvider _provider;
public MarketingService(IDataProvider provider)
{
_provider = provider;
}
public string GetData(int id)
{
return _provider.Get(id);
}
}
В настоящее время у меня есть два провайдера: HttpDataProvider и FileDataProvider. Обычно я подключаюсь к HttpDataProvider, но если внешняя веб-служба терпит неудачу, я хотел бы изменить систему для привязки к FileDataProvider. Что-то вроде:
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;
}
Так что, когда это было выполнено все будущие экземпляры MarketingService будут автоматически подключены к FileDataProvider. Кто-нибудь знает, как изменить привязку Виндзора на лету?
Мы использовали эту реализацию с успехом, однако наши верхние потребляющие потоки работали со словарем, поэтому мы изменили его на ConcurrentDictionary, чтобы сделать его потокобезопасным, как рекомендовано здесь: https://blogs.msdn.microsoft.com/tess/2009/12/21/высокий процессор-в-сеть-приложения-с помощью A-статического-родового-словаря / – Calum