2010-09-29 7 views
0

Voici le code C#:StructureMap 2.6 - Comment le faire dans le fichier de configuration

var server = ******* some internal logic to determine server name **** 
var username = ******* some internal logic to determine user name **** 
var password = ******* some internal logic to determine password **** 

ObjectFactory.Initialize(x => 
{            
x.For<IService<bool>>().Add<Service>() 
.Ctor<string>("server").Is(server) 
.Ctor<string>("username").Is(username) 
.Ctor<string>("password").Is(password) 
} 

Cela fonctionne très bien, mais je voudrais déplacer ce dans le fichier de configuration que je ne veux pas faire référence type concerete directement dans mon code.

Il n'y a pas beaucoup de documentation sur 2.6. Je ne pouvais pas trouver comment gérer cela dans la configuration.

Idéalement, je voudrais injecter les paramètres de serveur, de nom d'utilisateur et de mot de passe dans ObjectFactory et d'autres comment utiliser ces paramètres dans la configuration.

(PS. Il n'a pas besoin nécessaire d'être avec StructureMap tout conteneur IAC qui peut soutenir ce scénario sera la bienvenue)

Merci

+0

Si vous déplacez le mappage vers un fichier XML de configuration, vous perdrez le support de refactoring. Es-tu d'accord avec ça? –

+0

Oui, c'est bon. Bien que ce ne soit pas idéal. Nous avons besoin de pouvoir changer l'implémentation sans recompiler le code. – Zerdush

+0

Aussi, j'oublie de dire que cet objet Service fait partie de l'arbre, donc je ne peux pas faire ObjectFactory.GetInstance. StructureMap le résolvant automatiquement. – Zerdush

Répondre

0

La façon la plus simple pour gérer ce type de cas serait introduire un nouveau type pour fournir les arguments du constructeur primitif, et l'enregistrer dans le code. Ensuite, vous pouvez enregistrer le service, et ce nouveau type peut être câblé automatiquement par le conteneur. Cela vous permet également de déplacer la logique pour obtenir le serveur, le nom d'utilisateur et le mot de passe dans ce nouvel objet et hors de la configuration du conteneur.

+0

Salut Robin, merci pour votre réponse. Je viens de mettre en œuvre la même façon que vous avez décrit et oui, il semble beaucoup plus propre. Mais à la fin je suis passé à CastleWindsor car sa documentation est beaucoup plus complète. J'ai vraiment eu du mal avec la documentation de StructureMap et il n'y a pas beaucoup d'aide pour la configuration xml, on dirait que beaucoup de gens la configurent par code (ce qui est logique si vous n'avez pas d'exigences spécifiques). Merci encore. – Zerdush