2009-09-18 2 views
1

저는 디커플링을위한 설정 파일을 사용하여 Spring.NET을 통해 생성해야하는 두 개의 매개 변수가있는 객체를 가지고 있습니다.Spring.NET 매개 변수가있는 객체 생성

public Object(string param1, string param2) { ... } 

개의 파라미터가 동적으로 사용자 이름 및 암호를 전달 사용자 상호 작용에 기초하여 전달되므로,이 값은 하드 구성 파일에 코딩 될 수 없다. 따라서 다음이 작동하지 않습니다

<object name="WinFormApplicationWorkflow" type="COM.Us.Workflow.ApplicationWorkflow, "COM.Us.Workflow "> 
<!-- this will NOT work --> 
    <constructor-arg index="0" value="TESTUSER"></constructor-arg> 
    <constructor-arg index="1" value="TESTPW"></constructor-arg> 
    <!--/-->   
    <property name="NetworkWorkflow" ref="NetworkWorkflow" /> 
    <property name="ExceptionLogger" ref="ExceptionLogger" /> 
</object> 

을 나는 다만 수 있도록 내가 Spring.NET이 할 수있는 방법 :

ContextRegister.GetContext().GetObject("WinFormApplicationWorkflow"); 

을하지만 여전히 내 워크 플로우 클래스에 두 필요한 매개 변수를 전달 .

답변

2

Spring.Objects.Factory.IObjectFactory 인터페이스의 오버로드 된 메서드 GetObject (string, object [])를 사용하여 개체 생성을위한 동적 값을 전달할 수 있습니다.

string userName = "Test"; 
string password = "Test"; 
object[] arguments = new object[] { userName, password }; 

ContextRegister.GetContext().GetObject("WinFormApplicationWorkflow", arguments); 
+0

이제 재미 있습니다. 문서에서는이 메서드가 공유 인스턴스 또는 독립 인스턴스를 반환 할 수 있다고 말합니다. 그러나 다른 생성자 인수를 전달할 수 있기 때문에 단일성이 될 수는 없습니다. 항상 새로운 물건을 얻는다는 뜻입니까? 아니면 싱글 톤이 재구성 될 것인가? 또는 고유 한 인수마다 별도의 인스턴스가 생성됩니까? –

+0

@Alexander : 내 생각에, 각 GetObject() 호출은 지정된 유형의 새 인스턴스를 생성하고 지정된 인수와 일치하는 생성자를 호출합니다. – Jehof