Есть ли преимущества Property Injection перед Constructor Injection?

Возможный дубликат:
Внедрение зависимости через конструкторы или установщики свойств?

Мне любопытно, имеет ли Внедрение свойств какие-либо преимущества перед Внедрение конструктора:

  public class LoginController : Controller
  {
    [Inject]
    public ICookiesManager CookiesManager {get; set;}

    [Inject]
    public ISecurityManager SecurityManager {get; set;}

    public LoginController()
    {

    }
  }

vs

  public class LoginController : Controller
  {
    private ICookiesManager _cookiesManager;
    private ISecurityManager _securityManager;

    public LoginController(ICookiesManager cookiesManager, ISecurityManager securityManager)
    {
      _securityManager = securityManager;
      _cookiesManager = cookiesManager;
    }
  }

person Ruslan    schedule 06.05.2012    source источник


Ответы (1)


Эффективная разница между двумя шаблонами очень небольшая, за исключением внедрения свойств, вы можете заменить реализацию простым набором свойств. При внедрении конструктора (как правило) более явно видно, что вы не хотите, чтобы кто-либо заменял реализацию во время выполнения (поскольку для этого потребуется создать новый LoginController).

person x0n    schedule 06.05.2012
comment
Да, внедрение свойств позволяет заменять логику в уже созданных объектах, но в то же время это может быть недостатком Property Injection. Ищу плюсы :) - person Ruslan; 06.05.2012