Я использую внедрение свойств только для зависимостей, которые не требуются для правильной работы класса, но могут добавить некоторые функции, если пользователь их устанавливает.Примером такой функциональности является регистрация.Таким образом, у вас может быть свойство, представляющее регистратор, в котором пользователь может предоставить свою собственную реализацию, и если он этого не делает, класс продолжает работать нормально, но он просто не регистрирует.
Для всего остального я использую конструкторинъекции.Таким образом, вы указываете потребителю, что у этого класса есть требуемая зависимость от какой-либо другой службы.
Поэтому, чтобы ответить на ваш вопрос о внедрении свойства, я бы просто сказал:
public SomeClass
{
public IUserService UserService { get; set; }
public void SomeMethodWhichDoesntEnforceUserService()
{
if (UserService != null)
{
// Provide some additional functionality
}
}
}
и есливаш класс не может функционировать должным образом без пользовательского сервиса:
public SomeClass
{
private readonly IUserService _userService;
public SomeClass(IUserService userService)
{
_userService = userService;
}
public void SomeMethodWhichRequiresTheService()
{
_userService.DoSomething();
}
}
Так что в обоих случаях нет ссылок на какие-либо особенности DI.Вот что такое Inversion of Control.