Eu tenho lido os artigos no MSDN sobre Unity (injeção de dependência, inversão de controle), mas acho que preciso explicá-lo em termos simples (ou exemplos simples). Eu estou familiarizado com o padrão MVPC (nós o usamos aqui), mas ainda não consigo entender essa coisa do Unity ainda, e acho que é o próximo passo no design do aplicativo.
c#
dependency-injection
inversion-of-control
unity-container
Ryan Abbott
fonte
fonte
Respostas:
A unidade é apenas um "contêiner" de IoC. Google StructureMap e experimente. Um pouco mais fácil de entender, eu acho, quando as coisas de IoC são novas para você.
Basicamente, se você entende de IoC, entende que o que está fazendo é inverter o controle para quando um objeto é criado.
Sem IoC:
Com contêiner de IoC:
Sem o IoC, sua classe que depende do IMyService precisa atualizar uma versão concreta do serviço a ser usada. E isso é ruim por vários motivos (você associou sua classe a uma versão concreta específica do IMyService, não pode testá-lo facilmente, não pode alterá-lo facilmente etc.)
Com um contêiner de IoC, você "configura" o contêiner para resolver essas dependências para você. Portanto, com um esquema de injeção baseado em construtor, basta passar a interface para a dependência IMyService no construtor. Quando você cria o MyClass com seu contêiner, ele resolverá a dependência do IMyService para você.
Usando o StructureMap, a configuração do contêiner fica assim:
Portanto, o que você fez foi informado ao contêiner: "Quando alguém solicitar o IMyService, dê uma cópia do SomeConcreteService". E você também especificou que, quando alguém pede uma MyClass, ela recebe uma MyClass concreta.
Isso é tudo que um contêiner de IoC realmente faz. Eles podem fazer mais, mas esse é o objetivo - eles resolvem dependências para você, então você não precisa (e não precisa usar a palavra-chave "nova" em todo o código).
Etapa final: ao criar seu MyClass, você faria o seguinte:
Espero que ajude. Fique a vontade para me mandar um e-mail.
fonte
Acabei de assistir ao Screencast de IoC de injeção de dependência de unidade de 30 minutos de David Hayden e achei que era uma boa explicação com exemplos. Aqui está um trecho das notas do programa:
O screencast mostra vários usos comuns do Unity IoC, como:
fonte
O Unity é uma biblioteca como muitas outras que permite obter uma instância de um tipo solicitado sem precisar criar você mesma. Tão dado.
Você usaria uma biblioteca como o Unity para registrar a Calculadora a ser retornada quando o tipo ICalculator for solicitado, também conhecido como IoC (Inversion of Control) (este exemplo é teórico, não tecnicamente correto).
Então agora, quando você quer uma instância de um ICalculator, apenas ...
As bibliotecas de IoC geralmente podem ser configuradas para reter um singleton ou criar uma nova instância sempre que você resolver um tipo.
Agora, digamos que você tenha uma classe que depende de um ICalculator para estar presente que você poderia ter ..
E você pode configurar a biblioteca para injetar um objeto no construtor quando ele é criado.
Portanto, DI ou injeção de dependência significa injetar qualquer objeto que outro possa exigir.
fonte
Esse cara, o WilcoxTutorials, oferece uma excelente demonstração do contêiner Unity, voltado para iniciantes.
Parte 1: http://www.youtube.com/watch?v=CWwe9Z0Gyew
Parte 2: http://www.youtube.com/watch?v=PsIbevgzQQE
Em menos de meia hora e você entenderá o básico!
fonte
A unidade é uma IoC. O objetivo da IoC é abstrair a fiação das dependências entre os tipos fora dos próprios tipos. Isso tem algumas vantagens. Antes de tudo, isso é feito centralmente, o que significa que você não precisa alterar muito código quando as dependências mudam (o que pode ser o caso para testes de unidade).
Além disso, se a fiação for feita usando dados de configuração em vez de código, você poderá reconectar as dependências após a implantação e, assim, alterar o comportamento do aplicativo sem alterar o código.
fonte
O MSDN possui um Guia do desenvolvedor para injeção de dependência usando o Unity que pode ser útil.
O Guia do desenvolvedor começa com o básico sobre o que é injeção de dependência e continua com exemplos de como usar o Unity para injeção de dependência. Em fevereiro de 2014, o Guia do desenvolvedor abrange o Unity 3.0, lançado em abril de 2013.
fonte
Estou abordando a maioria dos exemplos de injeção de dependência na API da Web do ASP.NET 2
No DIAutoV2Controller.cs, o mecanismo de injeção automática é usado
No DIV2Controller.cs, tudo será injetado da classe Resolver Configuration Configuration
Configurando o resolvedor de dependências
fonte