문제

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

도움이 되었습니까?

해결책

편집하다 (저자가 아님) :IoC 프레임워크의 포괄적인 목록은 다음에서 확인할 수 있습니다. https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc:

  • 캐슬 윈저 - Castle Windsor는 .NET 및 Silverlight에서 사용할 수 있는 최고의 성숙도를 갖춘 Inversion of Control 컨테이너입니다.
  • 단일성 - 생성자, 속성 및 메서드 호출 주입을 지원하는 확장 가능한 경량 종속성 주입 컨테이너
  • 자동팩 - 중독성이 강한 .NET IoC 컨테이너
  • DryIoc - 간단하고 빠르며 모든 기능을 갖춘 IoC 컨테이너입니다.
  • 닌젝트 - .NET 종속성 주입기의 닌자
  • 구조 맵 - .Net용 원본 IoC/DI 컨테이너
  • 스프링닷넷 - Spring.NET은 엔터프라이즈 .NET 애플리케이션을 보다 쉽게 ​​구축할 수 있게 해주는 오픈 소스 애플리케이션 프레임워크입니다.
  • 라이트인젝션 - 초경량 IoC 컨테이너
  • 단순 인젝터 - Simple Injector는 Silverlight 4+, Windows Phone 8, Universal apps 및 Mono를 포함한 Windows 8을 지원하는 .NET 4+용 사용하기 쉬운 DI(종속성 주입) 라이브러리입니다.
  • Microsoft.Extensions.DependencyInjection - ASP.NET Core 애플리케이션용 기본 IoC 컨테이너입니다.
  • 스크루터 - Microsoft.Extensions.DependencyInjection에 대한 어셈블리 검색 확장입니다.
  • VS MEF - Visual Studio에서 사용되는 MEF(Managed Extensibility Framework) 구현입니다.
  • TinyIoC - 소규모 프로젝트, 도서관 및 초보자 모두를 위한 사용하기 쉽고 번거롭지 않은 제어 컨테이너 반전입니다.

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


여기서는 약간 까다로울 수도 있지만 DI(종속성 주입)는 프로그래밍 패턴이고 IoC(Inversion of Control) 프레임워크에 의해 촉진되지만 필수는 아니라는 점을 기억하는 것이 중요합니다.IoC 프레임워크는 DI를 훨씬 쉽게 만들고 DI 이상의 다양한 이점을 제공합니다.

그러고 보니 당신이 묻고 있는 것이 바로 그것이었을 것입니다.IoC 프레임워크 정보;나는 사용하곤했다 스프링닷넷 그리고 성윈저 하지만 그 뒤에 숨어 있는 진짜 고통은 작성해야 했던 성가신 XML 구성이었습니다!지금은 거의 모두 이 방향으로 움직이고 있어서 저는 구조 맵 작년에 강력한 형식의 제네릭과 레지스트리를 사용하여 유창한 구성으로 이동한 이후로 IoC 사용에 대한 고통 장벽이 0 아래로 떨어졌습니다!내 IoC 구성이 컴파일 타임에(대부분) 확인된다는 사실을 알게 되었고 StructureMap과 그 속도에 만족할 수밖에 없었습니다.다른 것들은 런타임 시 느렸다고는 말하지 않겠지만 설정하기가 더 어려웠고 종종 좌절감을 느꼈습니다.

업데이트

나는 사용해왔다 닌젝트 내 최신 프로젝트에서 사용하는 것이 정말 즐거웠습니다.여기서는 말이 좀 안 통하지만 (영국에서 말하는 것처럼) 이 프레임워크는 'the Dogs'입니다.신속하게 시작하고 실행하려는 모든 녹색 필드 프로젝트에 이 제품을 적극 권장합니다.나는 내가 필요한 모든 것을 한 곳에서 얻었습니다. 환상적인 Ninject 스크린캐스트 세트 저스틴 Etheredge로.Ninject를 기존 코드에 다시 맞추는 것이 전혀 문제가 되지 않는다고 볼 수는 없지만, 다음과 같은 말을 할 수도 있습니다. 구조 맵 내 경험상.앞으로 둘 사이에서 힘든 선택이 되겠지만, 저는 침체보다는 경쟁을 선호하며 거기에는 상당한 양의 건전한 경쟁이 있습니다.

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

다른 팁

각각 장단점이 있기 때문에 무엇을 찾고 있는지에 따라 다릅니다.

  1. Spring.NET Java 세계에서 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)에서 제공하고 지원합니다.Unity는 성능이 매우 뛰어나고 문서도 훌륭합니다.또한 고도로 구성 가능합니다.성/구조 맵과 같은 모든 부가 기능이 없습니다.

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

자동 팩스 https://github.com/autofac/Autofac 정말 빠르고 꽤 좋습니다.다음은 비교 링크입니다(Ninject가 메모리 누수 문제를 해결한 후 작성됨).

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

Ninject는 훌륭합니다.정말 빠른 것 같지만 비교를 해본 적이 없습니다.저자인 Nate가 Ninject와 다른 DI 프레임워크를 비교했으며 Ninject의 속도를 향상시킬 수 있는 더 많은 방법을 찾고 있다는 것을 알고 있습니다.

나는 내가 존경하는 많은 사람들이 StructureMap과 CastleWindsor에 대해 좋은 평가를 한다는 것을 들었습니다.내 생각에는 이것이 지금 당장 살펴봐야 할 세 가지입니다.

나는 사용한다 단순 인젝터:

Simple Injector는 모범 사례를 사용하여 솔루션을 성공의 구렁텅이로 안내하는 쉽고 유연하며 빠른 종속성 주입 라이브러리입니다.

저는 캐슬의 열렬한 팬입니다.나는 IoC 컨테이너 이야기를 넘어서 제공하는 시설도 좋아합니다.NHibernate, 로깅, AOP 등을 사용하는 것이 정말 간단해졌습니다.나도 사용 빈서 Boo를 구성하기 위해 노력했고 그 때문에 언어로서 Boo와 정말 사랑에 빠졌습니다.

Ninject를 추천할 수 있습니다.놀라울 정도로 빠르고 사용하기 쉽지만 XML 구성이 필요하지 않은 경우에만 Windsor를 사용해야 합니다.

나는 가장 간단한 Spring.NET 예제를 작동시키기 위해 성공하지 못한 채 하루 중 대부분을 고군분투했습니다.XML 파일에서 내 어셈블리를 찾는 방법을 알 수 없었습니다.반면 약 2시간 만에 NUnit 및 MSTest와의 통합 테스트를 포함하여 Ninject를 작동시킬 수 있었습니다.

나는 사용했다 스프링.NET 과거에는 큰 성공을 거두었습니다.우리가 그것을 사용한 프로젝트는 그 자체로 상당히 무거웠지만 나는 그것으로 인한 상당한 오버헤드를 전혀 눈치 채지 못했습니다.책을 읽는 데 시간이 조금 걸렸습니다. 선적 서류 비치 설정하려면.

C#의 가장 큰 장점은 수년간의 Java 개발자들이 밟아온 길을 따르고 있다는 것입니다.따라서 일반적으로 이러한 성격의 도구를 찾을 때 내 조언은 확실한 Java 답변을 찾고 아직 .NET 적응이 있는지 확인하라는 것입니다.

따라서 DI에 관해서는(그리고 거기에 너무 많은 옵션이 있으므로 이것은 실제로 취향의 문제입니다) 스프링.NET.또한 프로젝트 뒤에 있는 사람들을 조사하는 것이 항상 현명합니다.나는 Eric Sink를 존경하기 때문에 소스 제어를 위한 SourceGear 제품을 제안하는 데 아무런 문제가 없습니다.나는 Mark Pollack이 말하는 것을 보았고 내가 무슨 말을 할 수 있겠습니까? 그 사람은 그것을 바로 이해합니다.

결국에는 많은 DI 프레임워크가 있으며 가장 좋은 방법은 그 중 몇 가지를 사용하여 몇 가지 샘플 프로젝트를 수행하고 현명한 선택을 하는 것입니다.

행운을 빌어요!

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

Spring.Net은 매우 견고하지만 문서를 살펴보는 데 시간이 좀 걸렸습니다.Autofac은 훌륭하고 .Net 2.0이 지원되지만 이를 컴파일하려면 VS 2008이 필요합니다. 그렇지 않으면 명령줄을 사용하여 앱을 빌드해야 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top