Pergunta

Quais estruturas de injeção de dependência C#/.NET valem a pena examinar?E o que você pode dizer sobre sua complexidade e velocidade.

Foi útil?

Solução

editar (não do autor):Há uma lista abrangente de estruturas de IoC disponíveis em https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc:

  • Castelo Windsor - Castle Windsor é o melhor contêiner de Inversão de Controle maduro disponível para .NET e Silverlight
  • Unidade - Contêiner leve e extensível de injeção de dependência com suporte para injeção de construtor, propriedade e chamada de método
  • Autofac - Um contêiner .NET IoC viciante
  • DryIoc - Recipiente IoC simples, rápido e completo.
  • Ninjeto - O ninja dos injetores de dependência .NET
  • EstruturaMapa - O contêiner IoC/DI original para .Net
  • Primavera.Net - Spring.NET é uma estrutura de aplicativos de código aberto que facilita a construção de aplicativos .NET corporativos
  • LightInject - Um contêiner IoC ultraleve
  • Injetor Simples - Simple Injector é uma biblioteca de injeção de dependência (DI) fácil de usar para .NET 4+ que oferece suporte a Silverlight 4+, Windows Phone 8, Windows 8, incluindo aplicativos universais e Mono.
  • Microsoft.Extensions.DependencyInjection - O contêiner IoC padrão para aplicativos ASP.NET Core.
  • Escrutador - Extensões de verificação de montagem para Microsoft.Extensions.DependencyInjection.
  • VS MEF - Implementação do Managed Extensibility Framework (MEF) usado pelo Visual Studio.
  • TinyIoC - Um contêiner de inversão de controle fácil de usar e sem complicações para pequenos projetos, bibliotecas e iniciantes.

A resposta original segue.


Suponho que posso estar sendo um pouco exigente aqui, mas é importante observar que DI (Injeção de Dependência) é um padrão de programação e é facilitado, mas não requer, uma estrutura IoC (Inversão de Controle).As estruturas de IoC apenas tornam o DI muito mais fácil e fornecem uma série de outros benefícios além do DI.

Dito isto, tenho certeza de que é isso que você estava perguntando.Sobre Estruturas IoC;Eu costumava usar Primavera.Net e CasteloWindsor muito, mas a verdadeira dor de cabeça foi toda aquela configuração XML incômoda que você teve que escrever!Eles estão praticamente todos se movendo nessa direção agora, então tenho usado EstruturaMapa há mais ou menos um ano, e desde que mudei para uma configuração fluente usando genéricos fortemente digitados e um registro, minha barreira de dor ao usar IoC caiu para abaixo de zero!Eu fico muito feliz em saber agora que minha configuração de IoC é verificada em tempo de compilação (na maior parte) e não tive nada além de alegria com o StructureMap e sua velocidade.Não vou dizer que os outros foram lentos em tempo de execução, mas foram mais difíceis de configurar e a frustração muitas vezes venceu.

Atualizar

eu tenho usado Ninjeto no meu último projeto e foi um prazer absoluto usá-lo.As palavras me faltam um pouco aqui, mas (como dizemos no Reino Unido) esta estrutura é “os Cães”.Eu o recomendo fortemente para qualquer projeto de área verde onde você queira começar a trabalhar rapidamente.Eu consegui tudo que precisava de um fantástico conjunto de screencasts do Ninject por Justin Etheredge.Não consigo ver que adaptar o Ninject ao código existente seja um problema, mas o mesmo poderia ser dito de EstruturaMapa em minha experiência.Será uma escolha difícil entre os dois, mas prefiro competição do que estagnação e há uma quantidade razoável de competição saudável por aí.

Outros screencasts do IoC também podem ser encontrados aqui no Dimecasts.

Outras dicas

Depende do que você procura, pois cada um tem seus prós e contras.

  1. Spring.NET é o mais maduro que sai do Spring do mundo Java.Spring possui um conjunto muito rico de bibliotecas de framework que o estendem para suportar Web, Windows, etc.
  2. Castle Windsor é um dos mais utilizados na plataforma .NET e possui o maior ecossistema, é altamente configurável/extensível, possui gerenciamento de vida útil personalizado, suporte AOP, possui suporte inerente ao NHibernate e é um contêiner incrível e versátil.Windsor faz parte de uma pilha inteira que inclui Monorail, Active Record, etc.O próprio NHibernate é construído em cima de Windsor.
  3. Structure Map tem uma configuração muito rica e refinada através de um DSL interno.
  4. Autofac é um contêiner IoC da nova era com todo o suporte de programação funcional inerente.Ele também adota uma abordagem diferente das outras no gerenciamento da vida útil.O Autofac ainda é muito novo, mas vai além do que é possível com IoC.
  5. Ninject Ouvi dizer que é mais básico com uma abordagem menos é mais (ouvi, não experimentei).
  6. O maior discriminador Unity é:é da Microsoft e é suportado pela Microsoft (p&p).O Unity tem um desempenho muito bom e ótima documentação.Também é altamente configurável.Ele não tem todos os recursos de, digamos, Castelo / Mapa de Estrutura.

Então, em resumo, realmente depende do que é importante para você.Eu concordaria com outros em avaliar e ver qual deles se encaixa.O bom é que você tem uma boa seleção de donuts, em vez de apenas ter que comer um de gelatina.

Autofac. https://github.com/autofac/Autofac É muito rápido e muito bom.Aqui está um link com comparações (feitas depois que o Ninject corrigiu um problema de vazamento de memória).

http://www.codinginstinct.com/2008/05/ioc-container-benchmark-rerevisted.html

O Ninject é ótimo.Parece muito rápido, mas não fiz nenhuma comparação.Eu sei que Nate, o autor, fez algumas comparações entre o Ninject e outras estruturas de DI e está procurando mais maneiras de melhorar a velocidade do Ninject.

Já ouvi muitas pessoas que respeito dizerem coisas boas sobre o StructureMap e o CastleWindsor.Esses, na minha opinião, são os três grandes a serem observados agora.

eu uso Injetor Simples:

Simple Injector é uma biblioteca de injeção de dependência fácil, flexível e rápida que usa as melhores práticas para guiar suas soluções em direção ao sucesso.

Sou um grande fã do Castelo.Adoro as facilidades que ele oferece além da história do IoC Container.Realmente simplifica o uso do NHibernate, logging, AOP, etc.Eu também uso Binsor para configuração com o Boo e realmente me apaixonei pelo Boo como linguagem por causa disso.

Posso recomendar o Ninject.É incrivelmente rápido e fácil de usar, mas apenas se você não precisar de configuração XML; caso contrário, você deve usar o Windsor.

Passei a maior parte do dia lutando sem sucesso para fazer o exemplo mais simples do Spring.NET funcionar.Nunca consegui descobrir como fazer com que ele encontrasse meu assembly no arquivo XML.Em cerca de 2 horas, por outro lado, consegui fazer o Ninject funcionar, incluindo testes de integração com NUnit e MSTest.

eu usei Primavera.NET no passado e teve grande sucesso com isso.Nunca notei nenhuma sobrecarga substancial com ele, embora o projeto em que o usamos fosse bastante pesado por si só.Demorou apenas um pouco para ler o documentação para configurá-lo.

A grande vantagem do C# é que ele está seguindo um caminho trilhado por anos de desenvolvedores Java antes dele.Então, meu conselho, de modo geral ao procurar ferramentas dessa natureza, é procurar a resposta Java sólida e ver se já existe uma adaptação para .NET.

Então, quando se trata de DI (e há tantas opções por aí, isso é realmente uma questão de gosto) é Primavera.NET.Além disso, é sempre aconselhável pesquisar as pessoas por trás dos projetos.Não tenho nenhum problema em sugerir produtos SourceGear para controle de origem (além de usá-los) porque tenho respeito por Eric Sink.Eu vi Mark Pollack falar e o que posso dizer, o cara simplesmente entendeu.

No final das contas, existem muitas estruturas de DI e sua melhor aposta é fazer alguns exemplos de projetos com algumas delas e fazer uma escolha informada.

Boa sorte!

Acho que um bom lugar para começar é com o Ninject, é novo e levou em consideração muitos ajustes finos e é muito rápido.Nate, o desenvolvedor, realmente tem um ótimo site e um ótimo suporte.

Spring.Net é bastante sólido, mas a documentação demorou algum tempo para ser analisada.Autofac é bom e, embora o .Net 2.0 seja compatível, você precisa do VS 2008 para compilá-lo ou então usa a linha de comando para criar seu aplicativo.

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