У меня возникают проблемы с пониманием того, что именно возвращается из вызова на GetCurrentRegistrations
.
. Я пытаюсь выполнить sh, чтобы определить, был ли уже вызван вызов Register
. перед. В этом случае я хотел бы пропустить и продолжить. Важно, чтобы контейнер не блокировался в процессе!
Например:
var container = new Container();
container.Register(typeof(IFoo), typeof(Foo), Lifestyle.Transient);
var currentRegistrations = container.GetCurrentRegistrations();
if (currentRegistrations.Any(r => producer.ServiceType == typeof(ICommandHandler<>))
{
// skip
}
Выше, кажется, работает отлично. Однако, когда открыты типы, например c, вызов GetCurrentRegistrations
не возвращает регистрацию:
var container = new Container();
container.Register(typeof(ICommandHandler<>), typeof(CommandHandler<>), Lifestyle.Transient);
var currentRegistrations = container.GetCurrentRegistrations();
if (currentRegistrations.Any(r => producer.ServiceType == typeof(ICommandHandler<>))
{
// currentRegistrations is empty, so we are not getting here :-(
}
Есть ли другой способ определить это (без блокировки контейнера)?
Если посмотреть на тип возвращаемого значения, не будет ли лучше имя GetCurrentInstanceProducers
? Если подумать ... (возможно, частично отвечая на мой собственный вопрос сейчас), может быть, фактические InstanceProducers
еще не доступны для открытых обобщенных c регистраций?