Pergunta

Eu sou um longo tempo desenvolvedor do Windows, tendo cortei meus dentes no Win32 e COM cedo. Eu tenho trabalhado com .Net desde 2001, por isso estou bastante fluente em C # e do CLR. Eu nunca tinha ouvido falar do castelo de Windsor até que comecei a participar de estouro de pilha. Eu li o Castelo de Windsor "Getting Started" guia, mas não está clicando.

Ensine este velho cão novos truques, e diga-me por que eu deveria ser integrar o Castelo de Windsor em meus aplicativos corporativos.

Foi útil?

Solução

Castle Windsor é uma inversão da ferramenta de controle. Há outros como ele.

Pode dar-lhe objetos com dependências pré-construído e pré-cabeada bem ali. Um gráfico de objeto inteiro criado através de reflexão e de configuração em vez do operador "novo".

Iniciar aqui: http://tech.groups.yahoo.com/group / altdotnet / mensagem / 10434


Imagine que você tem uma classe de envio de e-mail. EmailSender. Imagine que você tem um outro WorkflowStepper classe. Dentro WorkflowStepper você precisa usar EmailSender.

Você pode sempre dizer new EmailSender().Send(emailMessage);

mas que - a utilização de new - cria um acoplamento forte que é difícil de mudar. (Este é um pequeno exemplo artificial depois de tudo)

Assim que se, em vez de Newing este menino mau por dentro WorkflowStepper, você só passou para o construtor?

Assim, pois, quem o chamou teve de novo o EmailSender.

new WorkflowStepper(emailSender).Step()

Imagine que você tem centenas de estas pequenas classes que têm apenas um responsável (google SRP) .. e você usar alguns deles em WorkflowStepper:

new WorkflowStepper(emailSender, alertRegistry, databaseConnection).Step()

Imagine que não se preocupar com os detalhes de EmailSender quando você está escrevendo WorkflowStepper ou AlertRegistry

Você só se preocupar com a preocupação que você está trabalhando.

Imagine que este gráfico inteiro (árvore) de objetos e dependências obtém com fio-se em tempo de execução, de modo que quando você faz isso:

WorkflowStepper stepper = Container.Get<WorkflowStepper>();

você recebe um WorkflowStepper negócio real com todas as dependências preenchidas automaticamente onde você precisar deles.

Não há new

Ele só acontece - porque ele sabe o que precisa o quê.

E você pode escrever menos defeitos com melhor concebido, código DRY de uma forma testável e reproduzível.

Outras dicas

Eu acho que IoC é um trampolim na direção certa no caminho para uma maior produtividade e gozo da equipe de desenvolvimento (incluindo PM, BA um BOs). Ela ajuda a estabelecer uma separação de interesses entre os desenvolvedores e para testes. Ele dá paz de espírito quando architecting que permite a flexibilidade como estruturas podem entrar e sair.

A melhor maneira de conseguir o objetivo que IoC (CW ou Ninject etc ..) leva uma facada é eliminar a política # 1 e # 2 necessidade de remoção para os desenvolvedores para colocar na fachada de compreensão falsa ao desenvolver. Será que estas duas soluções não parecem relacionadas com IoC? São eles:)

Mark Seemann escreveu e excelente livro sobre DI (Dependency Injection), que é um subconjunto do COI. Ele também compara um número de contentores. Eu não posso recomendar este o suficiente livro. O nome do livro é: "Dependency Injection na Net" https: // www .manning.com / livros / dependency-injeção-in-dot-net

Castle Windsor é Dependency Injection container. Significa com a ajuda deste você pode injetar suas dependências e usá-los sem criá-los com a ajuda de nova palavra-chave. por exemplo. Considere que você tenha escrito um repositório ou um serviço e você deseja usá-lo em muitos lugares, você precisa primeiro se registrar seu serviço / repositório e você pode começar a usá-lo depois injetá-lo no lugar necessário. Você pode dar uma olhada no abaixo tutorial que eu segui para aprender Castelo de Windsor.

ligação .

Hope vai ajudá-lo.

Em termos simples. Imagine que você tem alguma classe enterrado em seu código que precisa de alguns valores de configuração simples para fazer seu trabalho. Isso significa que tudo o que cria uma instância de que as necessidades de classe para obter essas dependências, para que normalmente acabam por ter de cargas refactor de aulas ao longo do caminho para apenas passar um pouco de config-para baixo, onde a instância é criada.

Assim, ou lotes de classes são desnecessariamente alterado, bando os valores de configuração em uma classe de configuração grande que também é ruim ... ou pior ainda vão Service Locator!

IoC permite que sua classe para obter todas as suas depencencies sem que aborrecimento, e administra vidas de casos mais explicitamente também.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top