С StructureMap вы можете сделать что-то вроде этого:
ForRequestedType<IFoo>()
.TheDefaultIsConcreteType<Foo>()
.OnCreation(x => x.Init());
Это не так просто, как реализовать интерфейс 'Initialisation' для вашего класса, но это также означает, что вам не нужно привязывать реализацию вашего класса к вашему выбору DI-контейнера, наследуя от интерфейса, специфичного для DI-контейнера (хотя я не уверен, насколько серьезна проблема, которая есть на самом деле).
Я полагаю, что внедрение конструктора гораздо чаще используется прямо сейчас, и внедрение свойств широко рассматривается как запасной вариант для случаев, когда не удается заставить DI-контейнер выполнять конструирование объекта для вас (например, веб-формы ASP.NET). , Хотя я могу ошибаться, это мой взгляд на эту тему!
Неужели вы думаете, что внедрение свойства "очищает код и немного тестирует"? Это интересно, потому что я как бы думаю об обратном - я думаю, что инъекция в конструктор «чище», и я предполагаю, что это может быть просто потому, что я обычно делаю это так, к чему я привык. :)