문제

우리는 ASP.NET MVC를 사용하고 있습니다.

이 중 가장 좋은 DI 프레임 워크 Ninject 또는 Unity는 무엇이며 그 이유는 무엇입니까?

도움이 되었습니까?

해결책

지난번에 그들 중 하나를 보았을 때 나는 Ninject가 약간 더 나은 것을 발견했습니다. 그러나 둘 다 그들의 단점이 있습니다.

Ninject는 더 나은 유동성 구성 체계를 가지고 있습니다. Unity는 대부분 XML 구성에 의존하는 것 같습니다. Ninject의 주요 단점은 [Inject] 속성을 추가하기 위해 Code의 모든 곳에서 Nineject.core를 참조해야한다는 것입니다.

내가 물어볼 수 있다면, 왜 당신의 선택을이 두 사람으로 제한하고 있습니까? 나는 Castle.windsor, Autofac 및 StructureMap이 적어도 좋든 더 좋다고 생각합니다.

다른 팁

나는 이것이 오래된 질문이라는 것을 알고 있지만 여기에 내 생각이 있습니다.

나는 개인적으로 Ninject를 좋아합니다. 나는 유창한 인터페이스와 XML을 피하는 것을 좋아합니다. 나는 일반적으로 XML을 좋아합니다. 이런 종류의 구성이 아닙니다. 특히 리팩토링이 관련 될 때 유창한 인터페이스를 사용하면 수정이 쉽습니다.

나는 StructureMap의 ObjectFactory를 놓치지 만 Nineject에 추가 할 수있는 쉬운 해결 방법이 있습니다.

Jeffery가 지적한 것처럼 생성자가 하나만있을 때 [Inject] 속성을 사용할 필요가 없습니다.

유창한 인터페이스가 XML을 피하기 때문에 유창한 인터페이스를 선호한다는 것을 알았을뿐만 아니라 영향을 미치는 것을 변경할 때 컴파일 시간 오류를 일으키기 때문입니다. XML 구성은 그렇지 않으며 기억하다 더 나은 것을 바꾸려고합니다.

주입 기술에 관계없이 주입 기술을 사용하면 주입 기술이 매우 어려운 stackoverflowexception을 던지는 단일성과 달리 주입 생성기를 사용하는 경우 원형 의존성을 감지합니다.

나는 Mendelt에 동의합니다. "최고의"DI 프레임 워크는 없습니다. 그것은 단지 상황에 달려 있으며 그들은 모두 장단점을 가지고 있습니다. David Hayden은 Dotnet Rocks에서 나머지 Entlib을 사용하고 그에 익숙하다면 Unity가 선호되는 선택이라고 생각하십시오. 고객이 말하는 사실을 좋아하기 때문에 개인적으로 Unity를 사용합니다. 마이크로 소프트 내가 말하는 것을 얻는다면 DLLS의 Enterprise Library (Unity).

인터페이스를 설정하기 위해 XML 구성과 콘크리트 구현을 모두 사용하지만 다음과 같이 주입 할 때 코드에서 속성을 사용합니다.

<type type="ILogger" mapTo="EntLibLogger">
   <lifetime type="singleton"/>
</type>

그리고 코드 :

[InjectionConstructor]
public Repository([Dependency] ILogger logger)

개인적으로 나는 그것이 무슨 일이 일어나는지 더 명확하게 만들어 내야한다고 생각하지만, 물론 당신은 당신이 당신의 신청서 전체에 통일성에 대한 언급을 가질 것이라고 주장 할 수 있습니다. 그것은 당신에게 달려 있습니다.

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