Причина, по которой AnyConcreteTypeNotAlreadyRegisteredSource
действует так, заключается в том, что ObservableCollection<string>
имеет конструктор, который принимает string
. Поскольку string
является конкретным типом класса, AnyConcreteTypeNotAlreadyRegistereSource
подберет это и попытается разрешить. System.String
однако не имеет конструкторов, которые можно вызвать, поэтому вы получаете исключение, которое вы испытываете.
Если вы только начинаете использовать Autofac, я настоятельно рекомендую использовать ACTNARS
- он имеет только несколько вариантов использования, и для большинства из них требуется параметр predicate
, чтобы избежать непредвиденного поведения, подобного приведенному выше. .
То, что у тебя есть сейчас, - лучший путь. Пара указателей - объявление As()
не требуется, если тип службы совпадает с конкретным типом компонента. Кроме того, ObservableCollection<T>
редко используется как услуга вообще - если вы можете предоставить более подробную информацию о вашем сценарии, возможно, есть лучший способ выразить это с помощью Autofac.