2009-05-06 6 views

답변

22

짧은 대답은 '예'입니다.

Resolve 방법을 사용할 때 자동으로 전달되어야합니다. 예를 들어

:

IUnityContainer container = new UnityContainer(); 
var something = container.Resolve<Something>(); 

은 또한이 당신이 보길 원하는 경우 프리즘 (코드 플렉스에)를 사용하는 것과 동일한 기술이다.

업데이트 추가 시험 :

[TestClass] 
public class Spike 
{ 
    [TestMethod] 
    public void unityTest() 
    { 
     var container = new UnityContainer(); 
     var something= container.Resolve<Something>(); 
     Assert.AreSame(container, something.Container); 
     // This passes. Success. 
    } 
} 

public class Something 
{ 
    public Something(IUnityContainer container) 
    { 
     Container = container; 
    } 

    public IUnityContainer Container { get; set; } 
} 
+4

컨테이너를 등록 할 필요가 없습니다. 기본적으로 IUnityContainer 종속성 자체를 해결합니다. –

+0

어젯밤에 스파이크를 돌릴 시간이 없었습니다. 내가 사용한 테스트를 추가했습니다. – bendewey

0

bendewey 당신이 그것을 객체가 다른 객체처럼, 한, 전달할 수 있지만, 언급 한 바와 같이, 왜 그것을 통과?

하나만 있습니다. 어떤 클래스에서 액세스 할 수있는 정적 속성이 아닌 이유는 무엇입니까?

+2

이 접근법에 대한 우려는 정적 클래스가 포함 된 프로젝트에서 불필요한 종속성을 유발할 수 있다는 것입니다. 내 경험에 따르면, 컨테이너를 주입하는 것도 테스트에 도움이됩니다. – bendewey

+0

정적 접근자가 다른 종속성에 사용되지 않는 것과 같은 이유로 테스트 가능성이 복잡합니다. –

+0

컨테이너를 얻기위한 단위 테스트 프레임 워크에 논리를 갖는 것보다 컨테이너를 다루기위한 별도의 클래스를 갖는 것이 더 좋을 것입니다. 그래서 여러분은 그 클래스를 테스트 할 수 있습니다. 이제 제대로 작동한다는 것을 알았으므로 단위 테스트에서는 테스트되지 않은 것을 사용하지 않습니다. 나는 단위 테스트에서 유틸리티 테스트를 거의하지 않으려 고합니다. –

1

첫 번째 대답은 제가 생각한 것과 같습니다. 고맙습니다.

유니티 이전에, 우리는 우리 자신의 IOC 컨테이너를 구축, 우리는 구문 뭔가 같은 ...

<constructor> 
    <param name="factory" value="[{factory}]"/> 
</constructor> 

(가) [{공장}]는 매개 변수로 자체를 전달하는 데 원인이있다.

정적으로 설정하는 방법 : 모든 개체가 단일 속성 (분명히)에 종속되므로이 방법을 사용하는 것을 좋아하지 않습니다. 재사용 성이 낮고 테스트가 덜 필요합니다. 특히 정적 인 경우 읽기 전용입니다 (꼭 있어야 함). 정적이 설정되면 생성 할 수있는 테스트 시나리오가 제한되는 결과를 가져올 수 없으며, 그렇게해서는 안됩니다.

그 밖의 것이 없으면 객체는 적어도 컨테이너를 매개 변수로 받아 들일 수 있어야합니다. 그곳에 없다면 정적으로 돌아갈 수 있습니다.

우리는 단일 인스턴스 사용의 길을 무너 뜨 렸으며 모든 것을 변경했습니다. 내 의견으로는, 객체는 그것보다 유연해야한다. 객체의 소비자가 객체에 전달하는 단일 인스턴스를 원한다면 그것은 소비자에게 달려 있습니다. 그러나 객체 자체가 그것을 요구해서는 안됩니다. 위에 표시된 구문을 사용하면 컨테이너를 그래프를 통해 전달하는 것이 매우 쉽습니다.

감사합니다.

제이

죄송합니다 ... new guy. 나는 이것이 대답이 아닌 주석 이었음을 알았습니다.

+0

이것은 원래 질문에 대한 업데이트로도 표현 될 수 있습니다. 또한 투표는 문맥에서 "첫 번째 대답"을 취할 수 있음을 명심하십시오. – bendewey

관련 문제