2009-07-08 7 views
1

J'ai cet objet "mySessionObject" de type "SessionObject". Il implémente les interfaces IMessageHandler<MessageA> et IMessageHandler<MessageB>. Je devrais seulement avoir un de ces objets, et il devrait vivre toute la HttpSession.Configuration de la structure de structure: un objet, plusieurs interfaces

Comment est-ce que je l'enregistre avec structuremap de sorte que je peux à tout moment dans la vie du HttpSession l'obtenir en appelant ObjectFactory.GetInstance<IMessageHandler<MessageA>>(), ou ObjectFactory.GetInstance<IMessageHandler<MessageB>>()?

Répondre

0

A l'intérieur de votre configuration normale StructureMap, je voudrais ajouter ce code:

ObjectFactory.Initialize(x => 
{ 
    x.ForRequestedType<IMessageHandler<MessageA>>(). 
     TheDefaultIsConcreteType<MyImplementingClass>(). 
     CacheBy(InstanceScope.HttpSession); 

    x.ForRequestedType<IMessageHandler<MessageB>>(). 
     TheDefaultIsConcreteType<MyImplementingClass>>(). 
     CacheBy(InstanceScope.HttpSession);}); 
} 

Notez que vous aurez besoin de la version 2.5.3 de StructureMap comme indiqué dans ce SO fil: StructureMap CacheBy InstanceScope.HttpSession not working

Je suis loin d'un compilateur pour le moment, mais je crois que CacheBy est assez intelligent pour partager des objets entre les classes d'implémentation. Si ce n'est pas le cas, vous pouvez construire une classe MyImplementingClass d'une autre manière, puis utiliser TheDefaultIs() plutôt que TheDefaultIsConcreteType().

Questions connexes