2009-09-18 44 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

您可以使用接口的重载方法GetObject(string,object [])来传入动态值以创建对象。

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

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

现在这很有趣。文档说这个方法可以返回共享或独立的实例。但我认为它不可能是单身人士,因为您可能会传递不同的构造函数参数。这是否意味着你将永远得到一个新的对象?或者你单身会重新配置(听起来不好)?或者你会得到每个独特的参数单独的实例? – 2009-11-15 10:39:03

+0

@Alexander:在我看来,每个GetObject()调用都会创建一个指定类型的新实例,调用与给定参数匹配的构造函数。 – Jehof 2009-11-16 07:32:05