2009-09-18 7 views
1

J'ai un objet avec deux paramètres qui doit être créé via Spring.NET en utilisant le fichier de configuration pour le découplage.Spring.NET Création d'un objet avec des paramètres

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

Les deux paramètres sont transmises dynamiquement en fonction de l'interaction utilisateur où ils passent un nom d'utilisateur et mot de passe, de sorte que ces valeurs ne peuvent pas être codées en dur dans le fichier de configuration. Par conséquent, le suivant ne fonctionnera pas:

<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> 

Comment puis-je faire avec Spring.NET, afin que je puisse faire juste:

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

Mais encore passer dans les deux paramètres nécessaires à ma classe de workflow .

Répondre

2

Vous pouvez utiliser la méthode surchargée GetObject (string, object []) de l'interface Spring.Objects.Factory.IObjectFactory pour transmettre vos valeurs dynamiques pour la création d'objet.

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

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

Maintenant c'est intéressant. Les docs disent que cette méthode peut renvoyer une instance partagée ou indépendante. Mais je ne vois pas comment cela peut être un singleton, parce que vous pouvez passer différents arguments constructeurs. Cela signifie-t-il que vous aurez toujours un nouvel objet? Ou vous singleton sera reconfiguré (sonne mal)? Ou vous obtiendrez des instances séparées par des arguments uniques? –

+0

@Alexander: À mon avis, chaque appel GetObject() créera une nouvelle instance du type spécifié, appelant le constructeur qui correspond aux arguments donnés. – Jehof

Questions connexes