Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Dica
titleBranch de Referência

Compare dependency_injection com unit_test_config

Painel
titleIntrodução

A injeção de dependência é uma versão especializada do padrão Inversão de Controle (IoC), onde a preocupação que está sendo invertida é o processo de obtenção da dependência necessária. Com a injeção de dependência, outra classe é responsável por injetar dependências em um objeto em tempo de execução. O exemplo de código a seguir mostra como a classe LoginViewModel é estruturada ao usar injeção de dependência:

Bloco de código
languagec#
themeRDark
titleC#
private IWebApiService<RMSUserLoginModel> _webApiService;
private IConfigService _configService;
private INavigationService _navigationService;

public LoginViewModel(IWebApiService<RMSUserLoginModel> webApiService, 
  IConfigService configService, IUserLoginService userLoginService, INavigationService navigationService)
  : base(configService, userLoginService)
{
  _webApiService = webApiService;
  _configService = configService;
  _navigationService = navigationService;

  var config = _configService.GetConfig();
  NomeAplicativo = config.AppName;
  if (config.UltimoUsuario != null && config.UltimoUsuario.savePassword && App.loginAutomatico)
  {
    App.loginAutomatico = false;
    this.LoginCommand.Execute(null);
  }
}

Clique para acessar o arquivo

O construtor LoginViewModel recebe várias instâncias de objeto de interface como argumentos injetados por outra classe. A única dependência na classe LoginViewModel está nos tipos de interface. Portanto, a classe LoginViewModel não tem conhecimento da classe responsável por instanciar os objetos da interface. A classe responsável por instanciar os objetos de interface e inseri-los na classe LoginViewModel é conhecida como contêiner de injeção de dependência.

...