2010-01-26 1 views
2

IoC 요구 사항에 대해 StructureMap에서 작업하고 있습니다.StructureMap, ObjectFactory 및 IContainer

유쾌하게 테스트 할 수있게하려면 가능한 한 항상 생성자 매개 변수로 IContainer 인스턴스를 전달합니다. 편의상, 매개 변수가없는 생성자에 ObjectFactory을 사용하는 것으로 돌아가고 싶습니다.

이 작업을 수행하는 가장 간단한 방법은 IContainerObjectFactory 클래스를 랩핑하여 다른 생성자로 전달하는 것입니다. 불행히도이 인스턴스가 공개적으로 노출 된 곳을 찾을 수 없습니다.

질문 : ObjectFactoryIContainer 그래서 난 사용자가 제공 한 인스턴스로 간단히 처리 할 수 ​​얻을 수있는 방법이

있습니까?

또는 의 구성을 새로운 Container 인스턴스로 복제 할 수 있습니까?

예 : 내가 좋아하는 것

는 다음을 수행 할 수 있도록 :

public class MyClass 
{ 
    public MyClass() 
    { 
     Container = ... // The ObjectFactory container instance. 
    } 

    public MyClass(IContainer container) 
    { 
     Container = container; 
    } 

    public IContainer Container { get; private set; } 
} 
+0

내 대답이 표를 놓친 경우. 사용 예제를 줄 수 있습니까? – KevM

답변

5

는 ObjectFactory를 당신에게 당신이 찾고있는 된 IContainer를 제공하는 컨테이너 속성을 노출합니다.

언제든지 IContainer (자주 사용하지 않아야 함)를 필요로 할 때마다 클래스 ctor에 항상 의존 할 수 있습니다.

public class INeedAContainer 
{ 
    private readonly IContainer _container; 

    public INeedAContainer(IContainer container) 
    { 
     _container = container; 
    } 

    // do stuff 
} 

나는 IContainer를 복제 할 방법이 없다고 생각합니다. 중첩 된 컨테이너의 수명 동안 transient를 동일하게 유지할 수있는 container.GetNestedContainer() 메소드가 있습니다. 중첩 된 컨테이너는 종종 "using"문에서 사용되며 데이터베이스 트랜잭션 경계와 같은 상태를 제어하는 ​​데 매우 유용합니다.

+0

그것이 저에게 답을 제공하는지 확실하지 않습니다. 시나리오를 명확히하기 위해 질문을 업데이트했습니다. –

+0

업데이트 된 답변 주셔서 감사합니다. 'ObjectFactory'를 뒤지고'Container' 속성을 찾지 못했습니다. 당신의 대답은 거기에 하나 있어야한다고 말한 후, 나는 최신 버전과 violla로 업데이 트되었습니다! 감사. –