Je suis vraiment coincé ici.Structure carte InstanceScope.Hybrid avec asp.net mvc misbehaves
J'ai une application mvc asp.net et j'utilise StructureMap 2.5.3 (SM) pour injecter des classes de service et de référentiel dans mes contrôleurs. Tous les contrôleurs sont fabriqués par une usine SM. J'ai également un datacontex Linq to SQL que je voulais mettre en cache par hybride.
public class DBRegistry:Registry
{
public DBRegistry()
{
ForRequestedType<SharpShopDataContext>()
.CacheBy(StructureMap.Attributes.InstanceScope.Hybrid)
.TheDefault.IsThis(new SharpShopDataContext());
}
}
La mise en cache ne semble pas fonctionner et j'ai des problèmes avec le datacontext à cause de cela.
Plusieurs demandes de navigateur tous retournent le même dbcontext ?! Dans l'une de mes classes de référentiel, j'ai mis ce code. Debug.WriteLine ("hashcode db:" + db.GetHashCode() + "" + DateTime.Now.ToString());
où db = DataContext imprimer aussi les hashcodes du dépôt en utilisant le db et le service en utilisant le référentiel, voici une impression de plusieurs demandes:
hashcode service: 18 6238972 26-3-2009 : 59: 34
dépôt hashcode: 21756593 26-3-2009 18:59:34
db hashcode: 7043935 26-3-2009 18:59:34
Service hashcode: 59389065 26- 3-2009 18:59:34
dépôt hashcode: 8331620 26-3-2009 18:59:34
db hashcode: 7043935 26-3-2009 18:59:34
hashcode service: 18 11291358 26-3-2009 : 59: 38
dépôt hashcode: 13848497 26-3-2009 18:59:38
db hashcode: 7043935 26-3-2009 18:59:38
Service hashcode: 42509361 26- 3-2009 18:59:38
dépôt hashcode: 56101068 26-3-2009 18:59:38
db hashcode: 7043935 26-3-2009 18:59:38
que vous pouvez voir est le 7043935 hashcode pour la datacontext chaque fois pour chaque requête, mais le service et le référentiel obtiennent une nouvelle instance et un hashcode à chaque fois. J'obtiens des erreurs bizarres à cause de cela, par exemple une exception dataAconcurrency car dbcontext a une valeur d'origine de 4 webrequests, alors que la base de données a été modifiée par une autre source.
en changeant InstanceScope à PerRequest, donne le même résultat, tous les hashcodes db sont les mêmes, en créant manuellement deux dbcontexts séparés donnent deux hashcodes différents ... – user81129