Correndo o risco de entrar no território da guerra santa, quais são os pontos fortes e fracos dessas estruturas populares de DI / IoC e se poderia facilmente ser considerado o melhor? ..:
- Ninject
- Unidade
- Castle.Windsor
- Autofac
- StructureMap
Existem outras estruturas de DI / IoC para C # que não listei aqui?
No contexto do meu caso de uso, estou criando um aplicativo cliente WPF e uma infraestrutura de serviços WCF / SQL, facilidade de uso (especialmente em termos de sintaxe clara e concisa), documentação consistente, bom suporte e desempenho da comunidade são fatores importantes na minha escolha.
Atualizar:
Os recursos e as perguntas duplicadas citadas parecem estar desatualizados. Alguém com conhecimento de todas essas estruturas pode apresentar e fornecer algumas informações reais?
Sei que é provável que a maioria das opiniões sobre esse assunto seja tendenciosa, mas espero que alguém tenha estudado todas essas estruturas e tenha pelo menos uma comparação geralmente objetiva.
Estou bastante disposto a fazer minhas próprias investigações se isso não tiver sido feito antes, mas presumi que isso fosse algo que pelo menos algumas pessoas já haviam feito.
Segunda atualização:
Se você tem experiência com mais de um contêiner de DI / IoC, classifique e resuma os prós e os contras deles, obrigado. Este não é um exercício para descobrir todos os pequenos recipientes obscuros que as pessoas criaram. Estou procurando comparações entre as estruturas populares (e ativas).
Respostas:
Embora uma resposta abrangente a essa pergunta ocupe centenas de páginas do meu livro , aqui está um gráfico de comparação rápida em que ainda estou trabalhando:
fonte
Me deparei com outra comparação de desempenho (última atualização em 10 de abril de 2014). Ele compara o seguinte:
Aqui está um rápido resumo do post:
Você também pode tentar usar a Common Service Selector Library e, esperançosamente, tentar várias opções e ver o que funciona melhor para você.
Algumas informações sobre o Common Service Selector Library do site:
Atualizar
13.09.2011: Funq e Munq foram adicionados à lista de participantes. Os gráficos também foram atualizados e o Spring.NET foi removido devido ao seu baixo desempenho.
11.04.2011: "adicionado Injetor Simples , o desempenho é o melhor de todos os participantes".
fonte
Basta ler este ótimo blog de comparação de contêineres .Net DI de Philip Mat.
Ele faz alguns testes completos de comparação de desempenho;
Ele recomenda o Autofac , pois é pequeno, rápido e fácil de usar ... Concordo. Parece que Unity e Ninject são os mais lentos em seus testes.
fonte
Isenção de responsabilidade: Desde o início de 2015, há uma excelente comparação dos recursos de IoC Container de Jimmy Bogard , aqui está um resumo:
Recipientes comparados:
O cenário é o seguinte: Eu tenho uma interface, IMediator, na qual posso enviar uma única solicitação / resposta ou uma notificação para vários destinatários:
Criei um conjunto básico de solicitações / respostas / notificações:
Eu estava interessado em examinar algumas coisas em relação ao suporte a contêiner para genéricos:
Configuração para variação genérica (registrando manipuladores para INotification base / criando pipelines de solicitação) Meus manipuladores são bem diretos, eles apenas enviam para o console:
Autofac
Ninject
Injetor Simples
StructureMap
Unidade
Windsor
fonte
Na verdade, existem toneladas de estruturas de IoC. Parece que todo programador tenta escrever um em algum momento de sua carreira. Talvez não para publicá-lo, mas para aprender o funcionamento interno.
Pessoalmente, prefiro o autofac, pois ele é bastante flexível e possui uma sintaxe que combina comigo (embora eu realmente odeie que todos os métodos de registro sejam métodos de extensão).
Algumas outras estruturas:
fonte
RegisterControllers()
para MVC), então pensei que o design em torno desse caso valia a pena. (Isto foi projetado 5+ anos atrás.)Bem, depois de procurar a melhor comparação que encontrei até agora, é:
http://www.sturmnet.org/blog/2010/03/04/poll-ioc-containers-for-net
http://www.sturmnet.org/blog/2010/03/04/poll-results-ioc-containers-for-net
Foi uma pesquisa realizada em março de 2010.
Um ponto de interesse para mim é que as pessoas que usaram um DI / IoC Framework e gostaram / não gostaram, o StructureMap parece estar no topo.
Também da pesquisa, parece que Castle.Windsor e StructureMap parecem ser os mais favorecidos.
Curiosamente, Unity e Spring.Net parecem ser as opções populares que geralmente não são apreciadas. (Eu estava pensando em Unity por preguiça (e crachá / suporte da Microsoft), mas examinarei mais de perto o Castle Windsor e o StructureMap agora.)
É claro que isso provavelmente (?) Não se aplica ao Unity 2.0, lançado em maio de 2010.
Espero que alguém possa fornecer uma comparação com base na experiência direta.
fonte
Veja uma comparação dos frameworks net-ioc-framework no código do Google, incluindo linfu e spring.net, que não estão na sua lista enquanto escrevo este texto.
Eu trabalhei com o spring.net: ele tem muitos recursos (aop, bibliotecas, docu, ...) e há muita experiência com ele no dotnet e no mundo java. Os recursos são modularizados para que você não precise usar todos os recursos. Os recursos são abstrações de problemas comuns, como banco de dados e abstração, registro e abstração. no entanto, é difícil fazer e depurar a configuração de IoC.
Pelo que li até agora: Se eu tivesse que escolher um projeto pequeno ou médio, usaria o ninject, pois a configuração do ioc é feita e depurável em c #. Mas ainda não trabalhei com isso. para sistemas modulares grandes, eu ficaria com o spring.net por causa das bibliotecas de abstração.
fonte