문제

누군가가 사용하는 것을 듣는 것은 드 rare니다 제어 역전 (IOC) .NET을 사용한 원리. 나는 Spring과 Picocontainer와 함께 훨씬 더 많은 IOC를 사용하는 Java와 함께 일하는 친구가 있습니다.

나는 당신의 코드에서 종속성을 제거하는 원칙을 이해하지만 ... 훨씬 더 나아 졌다는 것은 의심의 여지가 있습니다.

.NET 프로그래머가 왜 이러한 유형의 프레임 워크를 사용하지 않거나 사용하지 않습니까? 그렇게한다면 장기적으로 긍정적 인 영향을 미칩니 까?

도움이 되었습니까?

해결책

많은 사람들이 .NET에서 IOC를 사용하며 IOC 사용을 지원할 수있는 몇 가지 프레임 워크가 있습니다. Visual Studio에서 양식을 설계 할 때 컨테이너 와이어를 함께 모으기가 더 어렵 기 때문에 Winforms 측면에서는 덜 볼 수 있지만 적어도 작업하는 서버 측 .NET 응용 프로그램의 경우에는 적어도 작업 할 수 있습니다. , IOC는 매우 성공적으로 사용됩니다.

.NET에서 사용하는 이유는 무엇입니까? 같은 이유로 당신은 다른 곳에서 그것을 사용합니다. 내가 좋아하는 두 가지 가장 큰 것은 다음과 같습니다.

  • IOC를위한 설계는 좋은 코딩 연습을 시행하는 경향이 있습니다 - 인터페이스, 낮은 커플 링, 높은 응집력에 대한 설계. 이것은 또한 단위 테스트가 매우 쉬운 클래스로 이어집니다.
  • 시스템 구성은 종종 다시 컴파일하지 않고 변경 될 수 있습니다.

.NET에서 사용할 수있는 다른 IOC/DI 프레임 워크를 논의하는 다른 게시물 :

다른 팁

나는 사용한다 구조 맵 의존성 주입을 위해, 최근에만 사용하기 시작했습니다. ibatis.net 런타임에 도메인 객체 매퍼를 주입하려면 ( ~ 아니다 XML 구성 파일을 통해 감사합니다!).

나는 즉각적인 혜택을 보았다. 모든 맵퍼 (예 :)에 대한 인터페이스 생성 IPersonMapper) 그리고 다음을 추가합니다 모크 매우 훌륭한 데이터베이스 프리 장치 테스트를 빠르고 쉽게 작성할 수 있습니다.

이전 (.NET 1.0) 나는 주로 반사에 대해 배우기 위해 내 자신의 플러그인 시스템을 썼습니다. 그 이후로 나는 프로젝트에서 일종의 IOC를 구현했습니다. 최근에 나는 단위 테스트를하기 위해 IOC를 사용하기 시작했습니다. 나는이 시점에서 다른 방식으로 그렇게하는 것을 상상할 수 없었다.

IOC는 지금까지 .NET에서 그렇게 평범하지 않습니다. 그리고 그것은 Microsoft와 그들이 한 홍보 캠페인과 관련이 있습니다. 지금까지 그들은 VS의 RAD 기능을 더욱 강조하고 있었고 그 동안 IOC 및 DI와 같은 것들을 홍보하는 것을 잊어 버렸지 만 이제는 Unity라는 고유 한 프레임 워크와 ASP.NET MVC에서 수행 한 작업을 가지고 있습니다.

그래서 나는 대다수의 사람들이 그런 것들을 사용하기 시작할 것이라고 생각합니다. 그들이 사용할 대안이 있다는 것을 알고 있기 때문입니다.

그리고 나는 structuremap을 사용합니다.

더 일반화되고 있습니다. 현재 프로젝트는 Spring을 사용하고 이전 프로젝트에서 Castle Windsor를 사용했습니다.

이제 모든 복잡한 XML 선언을 방지하기 위해 '구성에 대한 규칙'아이디어를 사용하고 싶습니다.

IOC .NET 사용과 관련된 많은 이론이 있습니다. 이 지역에서 경험이없는 상당한 개발자가 있다고 생각합니다. 그들은 자바 배경에서 오지 않았습니다. 그들은 고전적인 ASP와 VB6 배경에서 나왔습니다. 또한 Microsoft는 최근까지 IOC 사용을 실제로 홍보하지 않았습니다.

또한 IOC를 사용하면 몇 가지가 가정됩니다. 먼저, 당신은 그것이 사용되는 것과 당신이 그것을 벗어나는 것을 이해해야합니다. 둘째, IOC 컨테이너를 실제로 사용할 수 있도록 코드를 개발해야합니다.

IOC는 도구 상자에서 다른 항목을 사용하는 것 이상입니다. 사용 방법을 아는 방법, 사용시기를 알고 개발자로 성숙합니다.

.NET와 관련하여 여러 IOC 컨테이너입니다. 나는 Windsor, StructureMap, Unity 및 가장 최근에 Nineject를 사용했습니다. 그러나 실제 응용 프로그램에서 모든 것을 사용하지는 않았습니다. 나는 놀고 거기에서 무슨 일이 일어나고 있는지 보는 것을 좋아합니다. IOC Containers .NET 시장이 상당히 좋습니다.

장치 테스트가 상류 종속 객체에 대한 모의 클래스 (실제 프로덕션 클래스 시뮬레이션)를 대체하여 장치 테스트가 진정으로 하나의 클래스에서 코드를 실행하고 테스트 할 수 있도록 단위 테스트를 허용합니다.

linfu.ioc 2.0을 시도해보십시오.

http://www.codeproject.com/kb/cs/linfu_ioc.aspx

가장 유연한 IOC 컨테이너 중 하나이며 린젝트와 마찬가지로 유지 관리 할 XML 파일이 없습니다. 그러나 Ninject와 달리 Linfu는 결합 코드를 작성하여 종속성을 함께 연결하도록 강요하지 않습니다. 구경하다! :)

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