3

저는 이전 프로젝트에서 Castle Windsor를 사용 해왔고 정말 좋아했습니다. 현재 프로젝트에서 다른 IoC 컨테이너를 사용하려고합니다. 캐슬 윈저 (Castle Windsor)는 2007 년부터 새로운 버전을 출시하지 않았으며 여전히 버전 1.0이 아니므로 상용 환경에서 사용하는 것을 정당화하기는 어렵습니다.다른 IoC 컨테이너에는 IInitializable과 유사한 기능이 있습니까?

캐슬 윈저에 대해 좋아하는 점 중 하나는 서비스가 IInitializable으로 구현 됨으로써 모든 종속성이 설정되면 서비스에서 Initialize 메서드를 호출 할 수 있다는 것입니다. 나는 이것을 많이 사용했다. 그것은 생성자 주입 대신에 속성 주입을 쉽게하고 코드와 테스트를 깨끗하게 정리합니다.

대체로 StructureMap, AutoFac, Unity 및 Spring.Net을 살펴 봤지만 이와 유사한 Spring.Net 만 지원합니다. 자동으로 Init() 메서드가 호출됩니다. 불행히도 Spring.Net은 IoC 컨테이너 (인터페이스 선언 대신 문자열 키를 기반으로 주입하므로 자동 와이어 링 지원도 제한됩니다)를 사용하는 방식을 실제로 지원하지 않습니다.

내가 본 IoC 컨테이너? 어떻게 든 IoC 컨테이너로 작업하는 내 방식이 잘못된 것입니까? 아니면 IInitializable 또는 Init() 같은 것을 지원하는 다른 IoC 컨테이너가 있습니까?

+0

캐슬은 트렁크에서 자신 만의 릴을 만들 것을 권장합니다. 그 이유는 잠시 동안 릴리스가 없었기 때문입니다. – CVertex

+0

또 다른 메모에서 캐슬에서 Autofac과 결코 뒤돌아 보지 마십시오 – CVertex

+0

Autofac은 지금 좋은 대안처럼 보입니다. 나는 유창한 등록 물건을 얻는 유일한 방법이기 때문에 내 자신의 취미 프로젝트를 위해 트렁크에서 건축 해왔다. 하지만 전문적인 작업을 위해서는 잘 테스트 된 릴리스를 원합니다. – Mendelt

답변

4

Autofac이 그것을 할 수 - 그들은 당신이 이런 식으로 뭔가를 할 수, 그것은 StructureMap와 Startable

+0

고마워, 나는 그것을 시험해보고, 어떻게 든 문서에서 그것을 놓쳤다. +1 – Mendelt

2

전화 :

ForRequestedType<IFoo>() 
    .TheDefaultIsConcreteType<Foo>() 
    .OnCreation(x => x.Init()); 

그것은 당신의 클래스에 '초기화'인터페이스를 구현하는만큼 쉬운 일이 아닙니다하지만 DI 컨테이너 고유의 인터페이스를 상속 받아 클래스 구현을 원하는 DI 컨테이너에 묶을 필요가 없다는 것을 의미합니다 (실제 문제의 양이 어느 정도인지는 모르겠지만).

저는 현재 컨스트럭터 인젝션이 훨씬 더 보편적으로 사용되고 있습니다. 그리고 DI 컨테이너가 객체 생성을 수행하는 것이 실현 불가능한 경우 (예 : ASP.NET 웹 폼). 나는 거기에서 틀릴 수 있었다, 그것은 단지 주제에 관한 나의보기 다!

당신은 정말로 속성 주입이 "코드 정리와 테스트"라고 생각합니까? 제가 생각하기에 컨셉 주입기가 '청소기'라고 생각하기 때문에 흥미 롭습니다. 간단히 말해서 그렇게하는 것이 정상적으로 그렇게하는 것이기 때문에 제가 생각하기에 그렇게 익숙합니다. :)

+0

감사합니다. 좋은 대답. +1 속성 삽입에서 얻을 수있는 가장 큰 장점은 클래스에 종속성을 추가 할 때마다 기존 코드와 테스트를 다시 작성할 필요가 없다는 것입니다. 또한 모든 의존성을 생성자에서 섞어 놓는 대신 한 곳에서 사용하면 코드가 읽기 쉽습니다. 그러나 나는 이것이 맛의 문제라고 상상할 수 있습니다 :-) – Mendelt

2

캐슬은 얼마 동안 출시되지 않았지만 아직 개발 중입니다. 최신 (매우 안정적인) 빌드 here을 얻을 수 있습니다.

공식 버전 2.0도 곧 출시 될 예정입니다. 당신이 이미 알고있는 것을 사용하지 않겠습니까?

+0

저는 여전히 그것을 사용하고 있지만 많은 상업적 설정은 꽤 어렵습니다. OSS 라이브러리를 사용하는 것은 공식적인 1.0 릴리즈가 없었던 OSS 라이브러리를 사용하는 클라이언트들에게 도전적 일 수 있으며, 릴리스 후보 3이 더 어렵 기 때문에 여전히 사용할 수 있습니다. 그래서 제가 대안을 찾고 있습니다. 다가올 2.0 버전에 대해 알려 주셔서 감사합니다. – Mendelt

2

LinFu.IOC에는 IInitialize가 있습니다. 여기에서 찾을 수 있습니다 : github.com/philiplaureano/LinFu