우리는 ASP.net MVC를 사용하고 있습니다.
다음 중 최고의 DI 프레임 워크 Ninject 또는 Unity는 무엇이며 그 이유는 무엇입니까?
우리는 ASP.net MVC를 사용하고 있습니다.
다음 중 최고의 DI 프레임 워크 Ninject 또는 Unity는 무엇이며 그 이유는 무엇입니까?
답변:
지난번에 둘 중 하나를봤을 때 Ninject가 약간 더 나은 것으로 나타났습니다. 그러나 둘 다 단점이 있습니다.
Ninject는 더 나은 유창한 구성 체계를 가지고 있습니다. Unity는 대부분 XML 구성에 의존하는 것 같습니다. Ninject의 주요 단점은 [Inject] 속성을 추가하기 위해 코드의 모든 곳에서 Ninject.Core를 참조해야한다는 것입니다.
내가 물어 보면, 왜이 두 가지 선택을 제한하는 거죠? Castle.Windsor, Autofac 및 StructureMap이 적어도 그 이상이라고 생각합니다.
나는 이것이 오래된 질문이라는 것을 알고 있지만 여기에 내 생각이 있습니다.
저는 개인적으로 Ninject를 좋아합니다. 나는 유창한 인터페이스와 XML을 피하는 것을 좋아합니다. 나는 일반적으로 XML을 좋아하지만 이러한 종류의 구성에 대해서는 그렇지 않습니다. 특히 리팩토링이 관련 될 때 유창한 인터페이스로 인해 수정하기가 더 쉽습니다.
StructureMap의 ObjectFactory가 그립지 만 Ninject에 추가하는 쉬운 해결 방법이 있습니다.
Jeffery가 지적했듯이 생성자가 하나 뿐인 경우 [Inject] 속성을 사용할 필요가 없습니다.
나는 유창한 인터페이스가 XML을 피할뿐만 아니라 영향을주는 것을 변경할 때 컴파일 시간 오류를 발생시키기 때문에 선호한다는 것을 발견했습니다. XML 구성은 그렇지 않으며 변경 해야 할 기억 이 적을 수록 더 좋습니다.
나는 Mendelt에 동의하며 "최고의"DI 프레임 워크는 없습니다. 상황에 따라 다르며 모두 장단점이 있습니다. David Hayden이 DotNet Rocks에서 EntLib의 나머지를 사용하고 그것에 익숙하다면 Unity가 선호되는 선택이라고 말했습니다. 제 고객 이 DLL에 Microsoft Enterprise Library (Unity) 라고 말하는 것을 좋아하기 때문에 저는 개인적으로 Unity를 사용 합니다.
인터페이스와 구체적인 구현을 설정하기 위해 xml 구성을 모두 사용하지만 다음과 같이 삽입 할 때 코드에서 속성을 사용합니다.
<type type="ILogger" mapTo="EntLibLogger">
<lifetime type="singleton"/>
</type>
그리고 코드에서 :
[InjectionConstructor]
public Repository([Dependency] ILogger logger)
개인적으로 나는 그것이 무슨 일이 일어나는지 더 명확하게 만든다고 생각하지만, 물론 당신은 당신의 응용 프로그램 전체에 통합에 대한 참조를 가질 것이라고 주장 할 수 있습니다. 그것은 당신에게 달려 있습니다.
http://www.palmmedia.de/blog/2011/8/30/ioc-container-benchmark-performance-comparison
Unity는 더 빠르지 만 최고는 아닙니다.