어떤 .NET Dependency Injection 프레임 워크를 살펴볼 가치가 있습니까? [닫은]


386

어떤 C # /. NET 종속성 주입 프레임 워크를 살펴볼 가치가 있습니까? 복잡성과 속도에 대해 무엇을 말할 수 있습니까?


13
IoC 컨테이너 벤치 마크-성능 비교 에는 20 개 이상의 제품에 대한 성능 및 기능 비교 테이블이 있으며 최신 상태를 유지합니다. 그것은 간단한 인젝터를
Michael Freidgeim

Ninject & Maestro에 감사드립니다. 나는 최고 등급의 답변이 Ninject를“절대적인 즐거움”으로 여깁니다.
Razvan Dumitru

6
IoC 컨테이너를 살펴보기 전에 컨테이너없이 관리해야한다고 강조했습니다. 배선과 주입을 수동으로 수행하십시오. 실제로 복잡하거나 큰 시스템이 없다면 실제로 복잡하지 않거나 많은 코드가 필요하지 않습니다. 당신이 그것을 이해하고 그것이 복잡해 졌다고 느낄 때, 어떤 종류의 프레임 워크가 당신을 돕는 지 이해하는 것이 더 적합 할 것입니다. 그러나 프로젝트가 DI를 올바르게 수행 할 수 있도록 IoC 컨테이너가 있어야한다는 규칙은 없습니다.
SARA

1
none으로 시작하십시오. 필요한 오브젝트 그래프를 수동으로 작성하십시오. 프레임 워크마다 요구 사항에 따라 다른 접근 방식이 있습니다. 하나를 선택하기 전에 가장 필요한 기능을 인식해야합니다.
Fabio

dotnetcore는 미래이므로 내장 된 DI 지원 기능을 계속 사용할 수 있습니다. 매우 훌륭하고 사용자 정의가 가능합니다.
ATL_DEV

답변:


339

편집 (저자에 의해 아님) : https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc 에서 사용할 수있는 IoC 프레임 워크의 전체 목록이 있습니다 :

  • Castle Windsor -Castle Windsor는 .NET 및 Silverlight에 사용할 수있는 번성, 성숙 제어 컨테이너의 최고 버전입니다
  • Unity- 생성자, 속성 및 메서드 호출 주입을 지원하는 경량의 확장 가능한 종속성 주입 컨테이너
  • Autofac- 중독성있는 .NET IoC 컨테이너
  • DryIoc- 간단하고 빠른 모든 기능을 갖춘 IoC 컨테이너.
  • Ninject-.NET 의존성 인젝터의 닌자
  • StructureMap-.Net 용 원본 IoC / DI 컨테이너
  • Spring.Net-Spring.NET 은 엔터프라이즈 .NET 애플리케이션을보다 쉽게 ​​구축 할 수있는 오픈 소스 애플리케이션 프레임 워크입니다.
  • LightInject- 초경량 IoC 컨테이너
  • Simple Injector -Simple Injector는 유니버설 앱 및 모노를 포함한 Silverlight 4+, Windows Phone 8, Windows 8을 지원하는 .NET 4+ 용 사용하기 쉬운 DI (Dependency Injection) 라이브러리입니다.
  • Microsoft.Extensions.DependencyInjection-ASP.NET Core 응용 프로그램의 기본 IoC 컨테이너입니다.
  • Scrutor -Microsoft.Extensions.DependencyInjection에 대한 어셈블리 검색 확장 프로그램입니다.
  • VS MEF -Visual Studio에서 사용하는 MEF (Managed Extensibility Framework) 구현
  • TinyIoC- 소규모 프로젝트, 라이브러리 및 초보자를위한 사용하기 쉽고 번거롭지 않은 컨트롤 컨테이너 반전.

원래 답변은 다음과 같습니다.


나는 여기서 약간 까다 롭다고 생각하지만 DI (Dependency Injection)는 프로그래밍 패턴이며 IoC (Inversion of Control) 프레임 워크에 의해 촉진되지만 필요하지는 않습니다. IoC 프레임 워크는 DI를 훨씬 쉽게 만들어 주며 DI에 비해 다양한 이점을 제공합니다.

그것은 당신이 요구 한 것이라고 확신합니다. IoC 프레임 워크 정보 나는 Spring.NetCastleWindsor 를 많이 사용 했지만 뒤에서 진짜 고통은 당신이 작성 해야하는 성가신 XML 구성이었습니다! 그들은 거의 모두이 방식으로 움직이고 있습니다. 그래서 작년에 StructureMap 을 사용 해 왔으며 강력한 유형의 제네릭과 레지스트리를 사용하여 유창한 구성으로 이동했기 때문에 IoC 사용에 대한 통증 장벽이 떨어졌습니다. 영하! 필자는 IoC 구성이 컴파일 타임 (대부분)에 검사되어 구조 맵과 그 속도에 기쁨이 있다는 것을 알았 기 때문에 절대 킥을 얻습니다. 나는 다른 사람들이 런타임에 느리다고 말하지는 않지만, 설정하기가 더 어려웠고 좌절은 종종 하루에 이겼습니다.

최신 정보

최신 프로젝트에서 Ninject 를 사용 하고 있으며 사용하는 것이 매우 즐거웠습니다. 단어는 여기서 조금 실패하지만 (영국에서 말하는 것처럼)이 프레임 워크는 '개'입니다. 빠르게 시작하고 실행하려는 모든 그린 ​​필드 프로젝트에 강력히 권장합니다. Justin Etheredge 의 환상적인 Ninject 스크린 캐스트 세트 에서 필요한 모든 것을 얻었 습니다. 기존 코드에 Ninject를 개조하는 것이 전혀 문제가되지 않음을 알 수 없지만 내 경험에서 StructureMap 에 대해서도 마찬가지 입니다. 그 둘 사이에서 앞으로 나아가는 것은 어려운 선택이지만, 나는 정체보다는 경쟁을 원할 것이며, 건전한 경쟁이 있습니다.

다른 IoC 스크린 캐스트도 Dimecasts 에서 찾을 수 있습니다 .


1
하나의 라이너에 대한 답변이 떠오를 것입니다. StructureMap을 확인하도록 설득했습니다.
Chris Marasti-Georg

7
멋지지만 공평하다-윈저는 이제 매우 훌륭한 본격적인 유창한 인터페이스를 가지고 있습니다.
Krzysztof Kozmic

DI 구현이 쉬운 것 외에도 IoC 프레임 워크가 제공하는 "기타 장점"이 무엇인지 설명해 주시겠습니까?
fearofawhackplanet

@fearofawhackplanet 가난한 사람의 DI 로는 할 수없는 IoC 컨테이너가 할 수있는 유일한 것 중 하나 는 차단 입니다. 여기에 좋은 요약 : kenneth-truyers.net/2013/05/16/…
Mathieu Guindon

1
나는 Ninject에 가장 느린라고 말할 소스의 몇 읽게 palmmedia.de/blog/2011/8/30/...stackoverflow.com/questions/4581791/...
누가 복음 T 오브라이언

77

그들은 각각 장단점이 있기 때문에 당신이 찾고있는 것에 달려 있습니다.

  1. Spring.NETJava 세계에서 Spring에서 나오는 가장 성숙합니다. Spring에는 웹, Windows 등을 지원하도록 확장 된 매우 다양한 프레임 워크 라이브러리가 있습니다.
  2. Castle Windsor.NET 플랫폼에서 가장 널리 사용되는 시스템 중 하나이며 가장 큰 에코 시스템을 가지고 있으며, 구성 / 확장 성이 뛰어나며, 사용자 정의 수명 관리, AOP 지원, 고유 한 NHibernate 지원 기능이 있으며 모두 멋진 컨테이너입니다. Windsor는 Monorail, Active Record 등을 포함하는 전체 스택의 일부입니다. NHibernate 자체는 Windsor 위에 구축됩니다.
  3. Structure Map 내부 DSL을 통해 매우 풍부하고 세밀한 구성을 갖습니다.
  4. Autofac고유 한 기능적 프로그래밍 지원을 모두 갖춘 새로운 시대의 IoC 컨테이너입니다. 또한 수명 관리에 대한 접근 방식이 다른 방식과 다릅니다. Autofac은 여전히 ​​새로운 기능이지만 IoC로 가능한 것에 대한 기준을 제시합니다.
  5. Ninject 나는 더 적은 접근 방식으로 더 많은 뼈가 있다고 들었습니다 (경험이 없음).
  6. 가장 큰 차별 Unity자는 Microsoft (p & p)의 지원자입니다. 유니티는 매우 좋은 성능과 훌륭한 문서를 가지고 있습니다. 또한 고도로 구성 가능합니다. 그것은 성 / 구조지도의 모든 종소리와 휘파람이 없습니다.

요약하면, 그것은 실제로 당신에게 중요한 것에 달려 있습니다. 나는 어느 것이 적합한 지보고 평가하고 보는 것에 대해 다른 사람들에게 동의 할 것입니다. 좋은 점은 젤리를 먹는 것보다 좋은 도넛을 선택한다는 것입니다.


4
Autofac은 실제로 새로운 것이 아니며 Unity보다 오래되었습니다 :)
Nicholas Blumhardt

1
Unity보다 최신이라고 말했습니까? 나는 그것이 새로운 시대라고 말했다. 즉 나는 그것이 기능적인 본성을 의미했다. 좋아, 내가 말한 것은 여전히 ​​매우 새롭습니다.하지만 의미는 IT가 새로운 것이 아니라 본성이라는 것입니다. :-)
Glenn Block

2
@Krzysztof-Unity가 쉬워졌습니다 (적어도 코드에 유창하게 구성되었을 때). 무엇을 아프게 했습니까?
TrueWill


6
흥미로운 성능 벤치 마크는 다음과 같습니다. palmmedia.de/Blog/2011/8/30/…
Steven


18

Ninject는 훌륭합니다. 정말 빠르지 만 비교는하지 않았습니다. 저자 인 Nate는 Ninject와 다른 DI 프레임 워크를 비교하고 Ninject의 속도를 향상시킬 수있는 더 많은 방법을 찾고 있습니다.

내가 존경하는 많은 사람들이 StructureMap과 CastleWindsor에 대해 좋은 말을하는 것을 들었습니다. 내 생각에 그것들은 지금 볼 큰 세 사람입니다.


1
Ninject는 인기가 있지만 빠르지는 않습니다. 실제로 거기에 가장 느린 중 하나입니다 palmmedia.de/Blog/2011/8/30/...
Serj 세이건

13

나는 간단한 인젝터를 사용한다 :

Simple Injector는 성공 사례를 향해 솔루션을 안내하기 위해 모범 사례를 사용하는 쉽고 유연하며 빠른 종속성 주입 라이브러리입니다.


4
일부는 몇 시간 동안 그것을 사용하고 심지어 그것을 위해 라이브러리를 쓴 사람을 포함하여 서비스 로케이터 안티 패턴을 고려주의 : blog.ploeh.dk/2010/02/03/ServiceLocatorisanAnti-Pattern
필립

4
Steven은 또한 Simple Injector의 제작자입니다. 그래서 이것은 일종의 스팸성 답변입니다. 특히 그는 그렇게하기 위해 많은 계정을 사용했습니다 ... Simple Injector는 꽤 빠르지 만 : palmmedia.de/Blog/2011/ 8 / 30 /…
Serj Sagan

8

저는 Castle의 열렬한 팬입니다. 나는 그것이 IoC 컨테이너 이야기를 넘어 제공하는 시설을 좋아합니다. NHibernate, logging, AOP 등을 사용하는 것이 정말 간단 합니다 . 또한 Bos 구성을 위해 Binsor 를 사용 하고 언어 때문에 Boo를 언어로 사랑했습니다.



5

가장 간단한 Spring.NET 예제를 작동시키기 위해 하루 종일 어려움을 겪지 않았습니다. XML 파일에서 어셈블리를 찾는 방법을 알 수 없었습니다. 반면에 약 2 시간 만에 NUnit과 MSTest와의 통합 테스트를 포함하여 Ninject를 작동시킬 수있었습니다.


4

나는 과거에 Spring.NET 을 사용해 왔으며 큰 성공을 거두었습니다. 우리가 사용한 프로젝트는 그 자체로 상당히 무거웠지만 나는 그것으로 상당한 오버 헤드를 보지 못했습니다. 설정 하는 데 문서 를 읽는 데 약간의 시간이 걸렸 습니다.


2

C #의 가장 큰 장점은 수년간의 Java 개발자들에 의해 극복 된 경로를 따르고 있다는 것입니다. 따라서 일반적으로 이러한 성격의 도구를 찾을 때 말하는 제 조언은 견고한 Java 응답을 찾고 .NET 적응이 아직 있는지 확인하는 것입니다.

DI에 관해서는 (그리고 거기에 많은 옵션이 있으며, 이것은 실제로 맛의 문제입니다) Spring.NET 입니다. 또한, 프로젝트 뒤에있는 사람들을 조사하는 것이 항상 현명합니다. Eric Sink를 존중하기 때문에 SourceGear 제품을 사용하지 않고 소스 제어를 제안하는 데 아무런 문제가 없습니다. 나는 마크 폴락이 말하는 것을 보았고 내가 말할 수있는 것은 그 사람이 얻는 것입니다.

결국, 많은 DI 프레임 워크가 있으며 가장 좋은 방법은 몇 가지 샘플 프로젝트를 수행하고 교육받은 선택을하는 것입니다.

행운을 빕니다!


2

시작하기에 좋은 곳은 Ninject를 사용하는 것이라고 생각합니다. 새롭고 미세 조정이 많이 고려되어 실제로 빠릅니다. 개발자 인 Nate는 훌륭한 사이트와 훌륭한 지원을 제공합니다.


왜 빠른가요 ??? 그것은 가장 느린 것 중 하나입니다! palmmedia.de/Blog/2011/8/30/…
Serj Sagan

2

Spring.Net은 상당히 견고하지만 문서화에 다소 시간이 걸렸습니다. Autofac은 좋으며 .Net 2.0이 지원되는 동안 VS 2008을 컴파일하거나 컴파일하려면 명령 줄을 사용해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.