Fala, xará, bom dia.
Falando de conceitos, o que temos no código mencionado por você são dois membros de uma classe, sendo que um deles é um campo e o outro é uma propriedade.
Então existe apenas uma propriedade chamada UserManager
, ok?
Uma propriedade representa uma característica vísivel para o mundo externo. Internamente seu valor é armazenado por um campo. Para escrever e ler valores desses campos usamos métodos de acesso, que são os famosos getters e setters.
Então para uma pessoa com propriedades Idade e Nome escreveríamos assim:
private int _idade;
public int Idade
{
get { return _idade; }
set { _idade = value; }
}
private string _nome;
public string Nome
{
get { return _nome; }
set { _nome = value; }
}
Mas repara que existe muito código repetido aí em cima, não acha? Por isso, a linguagem C# tem uma maneira bastante elegante de abreviar esse código todo. É o recurso chamado auto-implemented properties (maiores detalhes aqui).
Nosso código ficaria assim com o uso desse recurso:
public int Idade { get; set; }
public string Nome { get; set; }
Muito melhor né? Observe que agora o campo que armazena o valor da propriedade ficou escondido. Mesmo assim o campo continua exisitindo!!
Mas e quando precisamos incluir um código mais complexo na hora de acessar o campo que armazena o valor da propriedade?
Nesse caso abrimos mão desse recurso (auto-implemented properties) e voltamos para o esquema normal com campos explícitos.
Foi isso que aconteceu no código mencionado por você! Vamos revisar o código agora com os conceitos que discutimos aqui:
private UserManager _userManager; //esse é o campo
public UserManager UserManager //essa é a propriedade
{
//método de acesso para leitura
get
{
if (_userManager == null)
{
var contextOwin = HttpContext.GetOwinContext();
_userManager = contextOwin.GetUserManager<UserManager<UsuarioAplicacao>>();
}
return _userManager;
}
//método de acesso para escrita
set { _userManager = value; }
}
Então, respondendo a sua pergunta, o motivo do código é porque a leitura da propriedade UserManager
é mais complexa. No método de acesso get
verificamos se o campo é nulo e caso seja verdade buscamos uma instância através do contexto Owin da aplicação.
Espero que tenha ajudado a esclarecer sua dúvida.
Continue estudando!!