Итак, у меня есть этот класс, который я хотел бы зарегистрировать для нескольких синглетов, где я хотел бы различать их (после разрешения из контейнера), используя свойство "ExchangeName"
public interface IGlobalExchangeRateLimitProvider
{
void DoSomethingWithDb();
string ExchangeName { get; }
}
public class GlobalExchangeRateLimitProvider : IGlobalExchangeRateLimitProvider
{
private object _syncLock = new object();
public GlobalExchangeRateLimitProvider(string exchangeName)
{
ExchangeName = exchangeName;
}
public void DoSomethingWithDb()
{
lock (_syncLock)
{
}
}
public string ExchangeName { get; }
}
И эточто у меня есть в простом инжекторе для регистрации коллекции
var container = new Container();
container.Collection.Register(new[]
{
Lifestyle.Singleton.CreateRegistration<IGlobalExchangeRateLimitProvider>(
() => new GlobalExchangeRateLimitProvider("A"), container),
Lifestyle.Singleton.CreateRegistration<IGlobalExchangeRateLimitProvider>(
() => new GlobalExchangeRateLimitProvider("B"), container)
});
container.Verify();
Это все выглядит круто
Но когда я пытаюсь разрешить коллекцию вот так
var globalExchangeRateLimitProviders =
container.GetAllInstances<IGlobalExchangeRateLimitProvider>();
я получаюследующая ошибка
Нет регистрации для типа IEnumerableможет быть найден.
Я имею в виду, я могу догадаться, почему это так, потому что то, что я сейчас зарегистрировал, это IEnumerable<Registration>
не IEnumerable<IGlobalExchangeRateLimitProvider>
НоЯ просто не уверен, как подключить SimpleInjector, чтобы дать мне то, что я хочу здесь.Что мне нужно сделать, чтобы зарегистрировать вышеуказанное и получить IEnumerable<IGlobalExchangeRateLimitProvider>
из контейнера?
Как этого добиться с помощью SimpleInjector?