2008-09-24 4 views
11

IOC 프레임 워크에서 생성자에 인수를 전달하려면 어떻게해야합니까? 이 StructureMap에 수없는 것 같다)IOC 프레임 워크에서 생성자에 인수를 전달하는 방법

object objectToLogFor = xxx; 
container.Resolve<ILogging>(objectToLogFor); 

public class MyLogging : ILogging 
{ 
    public MyLogging(object objectToLogFor){} 
} 

(IOC 프레임 워크 불가지론으로 시도) : 내가 좋아하는 일을하고 싶습니다. 그러나 나는 누군가가 나를 틀리게 증명하는 걸보고 싶어합니다.

다른 프레임 워크가 더 많은 기능을 갖추고 있습니까? 아니면 잘못된 방식으로 IOC 프레임 워크를 사용하고 있습니까?

+1

누구 유니티와 함께이 작업을 수행하는 방법을 알고 StructureMap를 사용하여

? – mhamrah

답변

0

예, 다른 프레임 워크는 더 많은 기능이 있습니다. 생성자 삽입을 허용하는 ioc 프레임 워크를 사용해야합니다. Spring은 생성자 의존성 삽입을 허용하는 다중 언어 ioc 컨테이너의 한 예입니다.

+0

에스엠은 이것을 허용합니다, 따라서 아래 표는 – Schneider

4

어떻게 언어를 인식 할 수 있습니까? 이것은 해당 프레임 워크의 구현 세부 사항입니다.

스프링은 당신이 값/참조 목록으로 c'tor args를 지정하는 것을 허용합니다. 그것은 속성 주입에 비해, 그러나, 아주 읽을 수있어.

어떤 사람들은 이것에 대해 목걸이에 뜨거워 져서 c'tor 삽입이 자바에서 유일한 스레드 안전 접근법이라고 주장합니다. 기술적으로는 정확하지만 실제로는 중요하지 않습니다.

3

매우 일반적인 요구는 아니지만 때로는 유효한 것입니다. Ninject은 StructureMap보다 가벼우므로 컨텍스트에서 일시적인 객체를 검색 할 때 매개 변수를 전달할 수 있습니다. Spring.NET도 있습니다.

대부분의 경우 IoC 컨테이너에서 선언 된 개체는 일시적이 아니며 생성자/속성/메서드를 통해 다른 개체를 종속 개체로 받아들이지 않습니다.

그러나 실제로 컨테이너를 팩토리로 사용하지 않고 해결하려는 객체를 충분히 제어 할 수없는 경우 자연스럽지 않고 위험한 것으로 들더라도 속성 또는 메소드 주입을 사용할 수 있습니다 어떤 식 으로든.

0

다른 IoC 프레임 워크는 더 많은 기능이 있습니다.

e.e. 이 사용 얻을 수있는 구조지도에서 Autofac

+0

입니다. SM은 사용자가 요구하는 것을 지원하여 포스터에 관한 질문을 해결하기 위해 더 많은 "기능이 풍부한"무언가가 관련이 없습니다. – Schneider

0

당신은 또한 할 수 윈저 쉽게

5

와 함께 성을 위해 윈저 :

var foo = "foo"; 
var service = this.container.Resolve<TContract>(new { constructorArg1 = foo }); 

참고 익명 객체를 사용하여 생성자 인수를 지정하는 것.

var foo = "foo"; 
var service = container.With(foo).GetInstance<TContract>(); 
+0

TContract 란 무엇입니까? 나는 DNN v5의 모든 곳에서도 그것을 볼 수 있습니다. C#에서 이와 동등한 것은 무엇입니까? 감사. – Picflight

+0

TContract는 사용자가 지정하는 제네릭 형식이며 제네릭은 C# 기능입니다. http://msdn.microsoft.com/ko-kr/library/ms379564(VS.80).aspx를 참조하십시오. –

관련 문제