Dans mon DefaultRegistry J'ai cette configuration:Dans StructureMap, comment puis-je modifier le InstanceScope lors de l'exécution?
ForRequestedType<INHUnitOfWork>().CacheBy(InstanceScope.HttpContext)
.TheDefault.Is.OfConcreteType<NHibernateUnitOfWork>();
À un certain moment dans le flux d'applications Web Je souhaite modifier le InstanceScope à HttpSession pour obtenir une longue conversation, donc je fais ceci:
PluginTypeConfiguration config = ObjectFactory.Model.PluginTypes.FirstOrDefault(p => p.PluginType.FullName.Contains("INHUnitOfWork"));
config.Lifecycle.EjectAll();
config.Lifecycle = StructureMap.Pipeline.Lifecycles.GetLifecycle(InstanceScope.HttpSession);
Cela semble remplacer le InstanceScope initial, malheureusement il ne dure que pour la requête en cours. Lorsque la demande suivante arrive, la configuration initiale est à nouveau active et les informations de session sont perdues.
Plus tard, je veux aussi être en mesure de revenir le changement avec quelque chose comme ceci:
PluginTypeConfiguration config = ObjectFactory.Model.PluginTypes.FirstOrDefault(p => p.PluginType.FullName.Contains("INHUnitOfWork"));
config.Lifecycle.EjectAll();
config.Lifecycle = StructureMap.Pipeline.Lifecycles.GetLifecycle(InstanceScope.HttpContext);
mais si je vais le faire fonctionner dans un sens, il ne fonctionnera probablement dans les deux.
Est-il possible de remplacer le InstanceScope initial de manière permanente lors de l'exécution? Comment cela devrait-il être mis en œuvre? Aussi, pensez-vous que c'est un bon moyen d'obtenir une longue conversation ou qu'il existe une meilleure façon de le faire avec StructureMap & NHibernate?
Création d'une classe UnitOfWorkApplication pour gérer la création et la création de UnitOfWork StructureMap injecter les instances UnitOfWorkApplication au lieu des instances UnitOfWork a résolu le problème. Merci beaucoup, votre explication était exactement ce dont j'avais besoin. – abutnaru