어떤 C # /. NET 종속성 주입 프레임 워크를 살펴볼 가치가 있습니까? 복잡성과 속도에 대해 무엇을 말할 수 있습니까?
어떤 C # /. NET 종속성 주입 프레임 워크를 살펴볼 가치가 있습니까? 복잡성과 속도에 대해 무엇을 말할 수 있습니까?
답변:
편집 (저자에 의해 아님) : https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc 에서 사용할 수있는 IoC 프레임 워크의 전체 목록이 있습니다 :
원래 답변은 다음과 같습니다.
나는 여기서 약간 까다 롭다고 생각하지만 DI (Dependency Injection)는 프로그래밍 패턴이며 IoC (Inversion of Control) 프레임 워크에 의해 촉진되지만 필요하지는 않습니다. IoC 프레임 워크는 DI를 훨씬 쉽게 만들어 주며 DI에 비해 다양한 이점을 제공합니다.
그것은 당신이 요구 한 것이라고 확신합니다. IoC 프레임 워크 정보 나는 Spring.Net 과 CastleWindsor 를 많이 사용 했지만 뒤에서 진짜 고통은 당신이 작성 해야하는 성가신 XML 구성이었습니다! 그들은 거의 모두이 방식으로 움직이고 있습니다. 그래서 작년에 StructureMap 을 사용 해 왔으며 강력한 유형의 제네릭과 레지스트리를 사용하여 유창한 구성으로 이동했기 때문에 IoC 사용에 대한 통증 장벽이 떨어졌습니다. 영하! 필자는 IoC 구성이 컴파일 타임 (대부분)에 검사되어 구조 맵과 그 속도에 기쁨이 있다는 것을 알았 기 때문에 절대 킥을 얻습니다. 나는 다른 사람들이 런타임에 느리다고 말하지는 않지만, 설정하기가 더 어려웠고 좌절은 종종 하루에 이겼습니다.
최신 정보
최신 프로젝트에서 Ninject 를 사용 하고 있으며 사용하는 것이 매우 즐거웠습니다. 단어는 여기서 조금 실패하지만 (영국에서 말하는 것처럼)이 프레임 워크는 '개'입니다. 빠르게 시작하고 실행하려는 모든 그린 필드 프로젝트에 강력히 권장합니다. Justin Etheredge 의 환상적인 Ninject 스크린 캐스트 세트 에서 필요한 모든 것을 얻었 습니다. 기존 코드에 Ninject를 개조하는 것이 전혀 문제가되지 않음을 알 수 없지만 내 경험에서 StructureMap 에 대해서도 마찬가지 입니다. 그 둘 사이에서 앞으로 나아가는 것은 어려운 선택이지만, 나는 정체보다는 경쟁을 원할 것이며, 건전한 경쟁이 있습니다.
다른 IoC 스크린 캐스트도 Dimecasts 에서 찾을 수 있습니다 .
그들은 각각 장단점이 있기 때문에 당신이 찾고있는 것에 달려 있습니다.
Spring.NET
Java 세계에서 Spring에서 나오는 가장 성숙합니다. Spring에는 웹, Windows 등을 지원하도록 확장 된 매우 다양한 프레임 워크 라이브러리가 있습니다.Castle Windsor
.NET 플랫폼에서 가장 널리 사용되는 시스템 중 하나이며 가장 큰 에코 시스템을 가지고 있으며, 구성 / 확장 성이 뛰어나며, 사용자 정의 수명 관리, AOP 지원, 고유 한 NHibernate 지원 기능이 있으며 모두 멋진 컨테이너입니다. Windsor는 Monorail, Active Record 등을 포함하는 전체 스택의 일부입니다. NHibernate 자체는 Windsor 위에 구축됩니다.Structure Map
내부 DSL을 통해 매우 풍부하고 세밀한 구성을 갖습니다.Autofac
고유 한 기능적 프로그래밍 지원을 모두 갖춘 새로운 시대의 IoC 컨테이너입니다. 또한 수명 관리에 대한 접근 방식이 다른 방식과 다릅니다. Autofac은 여전히 새로운 기능이지만 IoC로 가능한 것에 대한 기준을 제시합니다.Ninject
나는 더 적은 접근 방식으로 더 많은 뼈가 있다고 들었습니다 (경험이 없음).Unity
자는 Microsoft (p & p)의 지원자입니다. 유니티는 매우 좋은 성능과 훌륭한 문서를 가지고 있습니다. 또한 고도로 구성 가능합니다. 그것은 성 / 구조지도의 모든 종소리와 휘파람이 없습니다.요약하면, 그것은 실제로 당신에게 중요한 것에 달려 있습니다. 나는 어느 것이 적합한 지보고 평가하고 보는 것에 대해 다른 사람들에게 동의 할 것입니다. 좋은 점은 젤리를 먹는 것보다 좋은 도넛을 선택한다는 것입니다.
자동 팩스. 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는 성공 사례를 향해 솔루션을 안내하기 위해 모범 사례를 사용하는 쉽고 유연하며 빠른 종속성 주입 라이브러리입니다.
Ninject를 추천 할 수 있습니다. 매우 빠르고 사용하기 쉬우나 XML 구성이 필요하지 않은 경우에만 Windsor를 사용해야합니다.
나는 과거에 Spring.NET 을 사용해 왔으며 큰 성공을 거두었습니다. 우리가 사용한 프로젝트는 그 자체로 상당히 무거웠지만 나는 그것으로 상당한 오버 헤드를 보지 못했습니다. 설정 하는 데 문서 를 읽는 데 약간의 시간이 걸렸 습니다.
C #의 가장 큰 장점은 수년간의 Java 개발자들에 의해 극복 된 경로를 따르고 있다는 것입니다. 따라서 일반적으로 이러한 성격의 도구를 찾을 때 말하는 제 조언은 견고한 Java 응답을 찾고 .NET 적응이 아직 있는지 확인하는 것입니다.
DI에 관해서는 (그리고 거기에 많은 옵션이 있으며, 이것은 실제로 맛의 문제입니다) Spring.NET 입니다. 또한, 프로젝트 뒤에있는 사람들을 조사하는 것이 항상 현명합니다. Eric Sink를 존중하기 때문에 SourceGear 제품을 사용하지 않고 소스 제어를 제안하는 데 아무런 문제가 없습니다. 나는 마크 폴락이 말하는 것을 보았고 내가 말할 수있는 것은 그 사람이 얻는 것입니다.
결국, 많은 DI 프레임 워크가 있으며 가장 좋은 방법은 몇 가지 샘플 프로젝트를 수행하고 교육받은 선택을하는 것입니다.
행운을 빕니다!
시작하기에 좋은 곳은 Ninject를 사용하는 것이라고 생각합니다. 새롭고 미세 조정이 많이 고려되어 실제로 빠릅니다. 개발자 인 Nate는 훌륭한 사이트와 훌륭한 지원을 제공합니다.