public void AllowRegisterSameTypeMultipleTimes() { Assert.DoesNotThrow(() => { _namedRegistrator.Add("T1", typeof(T2)); _namedRegistrator.Add(null, typeof(T2)); _namedRegistrator.Add("T2", typeof(T2)); _namedRegistrator.Add("T3", typeof(T1)); _namedRegistrator.Add("T4", typeof(T1)); }); }
/// <summary> /// Зарегистрировать тип с указанным именем. /// </summary> /// <param name="type">Тип.</param> /// <param name="name">Имя типа.</param> /// <exception cref="InvalidOperationException"> /// Если параметр type не реализует интерфейс <see cref="TInterface" />. /// </exception> /// <exception cref="InvalidOperationException"> /// Если тип с таким именем уже зарегистрирован. /// </exception> /// <returns>Конфигуратор именованных типов.</returns> public INamedRegistratorBuilder <TDiscriminator, TInterface> Add(Type type, TDiscriminator?name = default) { _namedRegistrator.Add(name, type); _services.TryAdd(new ServiceDescriptor(type, type, _serviceLifetime)); if (_equalityComparer.Equals(name, default)) { _services.TryAdd(new ServiceDescriptor( typeof(TInterface), sp => sp.GetRequiredService(type), _serviceLifetime) ); } return(this); }