Compartilhar via

Is there some downsize of using the primary constructor to depency injection?

Ricardo Alves Paula 0 Pontos de reputação
2024-03-01T19:53:15.8933333+00:00

Is there some downsize of using the primary constructor to depency injection?

I know it is a clear approach and very handy, but I'm thinking if there's some disadvantages.

public interface IService
{
    Distance GetDistance();
}

public class ExampleController(IService service) : ControllerBase
{
    [HttpGet]
    public ActionResult<Distance> Get()
    {
        return service.GetDistance();
    }
}

Source: https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/tutorials/primary-constructors

Thank you!

Tecnologias de desenvolvedor | .NET | Outro
Tecnologias de desenvolvedor | C#
Tecnologias de desenvolvedor | C#
Uma linguagem de programação fortemente tipada e orientada a objetos com raízes na família C de linguagens e que inclui suporte para programação orientada a componentes.
0 comentários Sem comentários
{count} votos

2 respostas

Classificar por: Mais útil
  1. Pablo Garcia (Tek Experts) 160 Pontos de reputação Equipe Externa da Microsoft
    2024-03-14T19:05:58.15+00:00

    Olá Ricardo,

    Obrigado por levantar sua investigação nos fóruns do MSDN.

    De acordo com a pergunta tem uma opção para utilizar o downsize, deixo aqui o artigo que fala sobre isso:

    https://stackoverflow.com/questions/77528963/how-to-use-a-primary-constructor-with-dependency-injection

    Se você tiver informações adicionais que possam nos ajudar para procurar por mais informações, poderia adicioná-las para acelerar o tempo de resposta e ter uma melhor certeza sobre o que você precisa.

    Fico no aguardo.

    Pablo Garcia | Microsoft MSDN team

    0 comentários Sem comentários

  2. Raphael Moreira 5 Pontos de reputação
    2025-10-03T20:58:57.1233333+00:00

    Olá, @Ricardo Alves Paula

    Não há nenhuma desvantagem em usar o construtor primário, já que ele nada mais é que um "atalho" (syntax sugar) para o construtor convencional .

    Se estiver em dúvida sobre quando ou em que situação usar, pense no seguinte: sua classe fará algo além de atribuir os parâmetros de entrada no construtor?

    • Se a resposta for "sim", você não precisa do construtor primário.
    • Se a resposta for "não", você pode usá-lo sem qualquer desvantagem.

    Seu intuito é reduzir a verbosidade de classes simples, da mesma forma que as propriedades. A intenção é permitir reduzir:

    Disso:

    public class Pessoa
    {
        private string _nome;
    
        public string Nome
        {
            get
            {
                return _nome;
            }
            set
            {
                _nome = value;
            }
        }
    }
    
    

    Para isso:

    public class Pessoa
    {
        public string Nome { get; set; }
    }
    

    Qual é melhor? Qual tem mais vantagem? Nenhuma das duas, pois depende do que você precisa. Ambas produzem o mesmo comportamento.

    • Vai implementar comportamentos adicionais em cada propriedade? Então use o tradicional (verboso)
    • Não vai implementar comportamentos adicionais em cada propriedade? Use o "atalho" (syntax sugar) da propriedade auto implementável.

    Se estiver receoso por conta da discussão no StackOverflow, mencionada pelo @Pablo Garcia (Tek Experts) , fique tranquilo, pois o assunto lá tem relação com bug de IDE e não um impedimento da sintaxe.

    Pode mockar tranquilo suas classes com ou sem construtor primário, pois nada muda. Nem no teste nem no injetor de dependência.


Sua resposta

As respostas podem ser marcadas como ‘Aceitas’ pelo autor da pergunta e ‘Recomendadas’ pelos moderadores, o que ajuda os usuários a saber a resposta que resolveu o problema do autor.