2017-03-29 2 views
1

J'essaie d'injecter une chaîne dans le registre structuremap au moment de l'exécution. Je l'ai fait avec succès avec une chaîne statique. comme celui-ciStructuremap Valeurs dynamiques du registre par défaut

For<TestDAL>().Use<TestDAL>().Ctor<string>("connectionString").Is("randomStringData"); 

mais quand je suis en train de faire la chaîne dynamique à l'exécution je ne suis pas en mesure de comprendre comment l'envoyer, je l'ai essayé HttpContext et session, mais ils sont toujours vides comme dans l'exemple ci-dessous:

HttpContext.Current.GetOwinContext().Environment.TryGetValue("dynamicString", out object dynString); 

For<TestDAL>().Use<TestDAL>().Ctor<string>("connectionString").Is(dynString); 

S'il vous plaît quelqu'un a anyidea sur la façon de faire cela?

Répondre

1

Vous évaluez uniquement le dynamicString complètement en avance. Vous pourriez avoir besoin de le faire paresseux il est évalué juste à temps comme ceci:

For<TestDAL>().Use<TestDAL>().Ctor<string>("connectionString").Is(() => { 
    string dynString = null; 

    HttpContext.Current.GetOwinContext() 
     .Environment.TryGetValue("dynamicString", out object dynString); 

    return dynString; 
}); 
+0

merci pour votre aide, mais cette solution est impossible puisque l'expression lambda avec un corps de déclaration ne peut pas être converti en un arbre d'expression. et cela ne fonctionnera pas – wandos

+0

Utilisez la surcharge ** other ** qui vous permet de fournir une description sous forme de chaîne et un Func au lieu de l'expression. –

+0

Pouvez-vous s'il vous plaît me donner un exemple sur la façon de – wandos