В версии 2.5.2.
обновление Я посмотрел и запустил вставленный вами код, и вы правы, что он не работает.Виндзор правильно распознает, что параметр имеет значение по умолчанию.Однако у Виндзора есть и второе правило: null
никогда не является допустимым значением для требуемой зависимости, и это второе правило выигрывает в вашем случае.
Это, вероятно, следует считать ошибкой.
Чтобы заставить его работать, вам нужно заменить DefaultDependencyResolver
на ваш собственный.
Вам нужно будет переопределить два метода: из DefaultDependencyResolver
примерно так:
public class AllowDefaultNullResolver : DefaultDependencyResolver
{
protected override bool CanResolveServiceDependency(CreationContext context, ComponentModel model, DependencyModel dependency)
{
return base.CanResolveServiceDependency(context, model, dependency) || dependency.HasDefaultValue;
}
protected override object ResolveServiceDependency(CreationContext context, ComponentModel model, DependencyModel dependency)
{
try
{
return base.ResolveServiceDependency(context, model, dependency);
}
catch (DependencyResolverException)
{
if(dependency.HasDefaultValue)
{
return dependency.DefaultValue;
}
throw;
}
}
}
и используйте этот распознаватель вместо используемого по умолчанию.