Unity 컨테이너가 자체를 생성자 매개 변수로 전달할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/827756

  •  06-07-2019
  •  | 
  •  

문제

Unity 컨테이너가 물체로 전달할 수있는 방법이 있습니까?

즉:

public class Something {

     public Something(IUnityContainer container) {
           ...
     }
}
도움이 되었습니까?

해결책

짧은 대답은 예입니다.

사용하면 자동으로 전달해야합니다 Resolve 행동 양식.

예를 들어:

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

또한, 이것은 Prism (Codeplex에서)이 그것을 살펴보고 싶다면 사용하는 것과 동일한 기술입니다.

추가 테스트 업데이트 :

[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; }
}

다른 팁

첫 번째 대답은 내가 생각했던 것입니다. 고맙습니다.

Unity 이전에 우리는 우리 자신의 IOC 컨테이너를 만들었고 구문이 있습니다.

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

{factory}]는 매개 변수로 전달됩니다.

정적으로 설정하는 것은 모든 객체가 단일 속성에 의존하기 때문에 해당 접근법을 사용하는 것을 좋아하지 않습니다. 특히 정적이 준비된 경우 (해야하는지). 정적이 설정되면 정적을 만들 수 없거나 엉망이되어 만들 수 없으므로 생성 할 수있는 테스트 시나리오가 제한됩니다.

다른 것이 없다면, 객체는 최소한 컨테이너를 매개 변수로 받아 들일 수 있어야합니다. 존재하지 않으면 정적으로 돌아갈 수 있습니다.

우리는 단일 인스턴스를 사용하는 길을 따라 갔고 결국 모든 것을 바꾸 었습니다. 제 생각에는 물체가 그보다 더 유연해야합니다. 객체의 소비자가 객체로 전달되는 단일 인스턴스를 원한다면 소비자에게 달려 있습니다. 그러나 객체 자체는 그것을 요구해서는 안됩니다. 위에 표시된 구문을 사용하면 그래프를 통해 컨테이너를 전달하기가 쉽습니다.

정보 주셔서 감사합니다.

어치

죄송합니다 ... 새로운 사람. 나는 이것이 대답이 아니라 의견이었을 것입니다.

Bendewey가 언급했듯이 다른 대상과 마찬가지로 대상이기 때문에 통과 할 수 있지만 왜 통과합니까?

당신은 하나만 가지고 있습니다. 왜 어떤 클래스에 액세스 할 수있는 정적 속성이 아닌가?

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