O que é o Castelo Windsor, e por que eu deveria me importar?
4 answers
Começa aqui: http://tech.groups.yahoo.com/group/altdotnet/message/10434
Imagine que tem uma aula de envio de E-mail. EmailSender. Imagina que tens outra aula. Trabalha-se bem. Dentro do WorkflowStepper você precisa usar EmailSender. Podes sempre dizer
new EmailSender().Send(emailMessage);
Mas isso - o uso de new
- cria um acoplamento apertado que é difícil de mudar. (este é um pequeno exemplo inventado afinal)
new WorkflowStepper(emailSender).Step()
Imagina que tens centenas dessas pequenas classes que só têm uma responsabilidade (Google SRP).. e você usa alguns deles em WorkflowStepper:
new WorkflowStepper(emailSender, alertRegistry, databaseConnection).Step()
Imagine não se preocupar com os detalhes de EmailSender
Quando você está escrevendo WorkflowStepper
ou AlertRegistry
Imagine todo este gráfico (árvore) de objectos e dependências fica ligado no tempo de execução, de modo que quando fizer isto:
WorkflowStepper stepper = Container.Get<WorkflowStepper>();
Tens um negócio a sério WorkflowStepper
com todas as dependências automaticamente preenchidas onde você precisa delas.
Não há new
Acontece porque sabe o que precisa de quê.
E você pode escrever menos defeitos com um código seco e melhor projetado de uma forma testável e repetível.
A melhor maneira de alcançar a meta que o COI (CW ou Ninject etc..) tenta eliminar a política # 1 e # 2 Remover necessidade de desenvolvedores para colocar na fachada de falsa compreensão ao desenvolver. Estas duas soluções não parecem estar relacionadas com o COI? São:)
Mark Seemann escreveu e excelente livro sobre DI (injeção de dependência) que é um subconjunto do COI. Ele também compara vários contêineres. Não posso recomendar este livro o suficiente. O nome do livro é: "Dependency Injection in .Net" https://www.manning.com/books/dependency-injection-in-dot-net
O Castelo Windsor é {[[0]} significa que, com a ajuda disto, Pode Injectar as suas dependências e usá-las sem as Criar com a ajuda de uma nova palavra-chave. por exemplo, considere que você escreveu um repositório ou um serviço e você deseja usá-lo em muitos lugares, você precisa primeiro registrar seu serviço / Repositório e você pode começar a usá-lo depois de injectá-lo no local necessário. Você pode dar uma olhada no tutorial abaixo que eu segui para aprender Castelo windsor.
Espero que te ajude.