2009-03-22 11 views
11

Je veux créer une instance nommée StructureMap dans le code, sans fichier de configurationComment définir une instance nommée StructureMap dans le code

Je veux être en mesure de créer l'instance comme ceci:

var namedInjector = ObjectFactory.GetNamedInstance<IInjectable>("Other"); 

I Impossible de définir un tel type dans le code. J'ai trouvé this échantillon mais il utilise l'ancienne syntaxe d'une version précédente et définit l'instance nommée comme:

.ForRequestedType<MementoType>() 
.AddConcreteType<ConcreteType>(instanceName) 

Dans la dernière version StructureMap il n'y a pas de méthode .AddConcreteType (instanceName) qui prend un nom d'instance.

Répondre

19

Je crois que vous avez besoin de quelque chose comme:

class MyRegistry : Registry { 
    public MyRegistry() { 
     this.ForRequestedType<IFoo>() 
      .TheDefaultIsConcreteType<Bar>() 
      .AddInstances(x => { 
       x.OfConcreteType<Blap>().WithName("abc"); 
      }); 
    } 
} 
... 
ObjectFactory.Configure(x=>x.AddRegistry<MyRegistry>()); 
IFoo test1 = ObjectFactory.GetInstance<IFoo>(); // Bar 
IFoo test2 = ObjectFactory.GetNamedInstance<IFoo>("abc"); // Blap 
... 
interface IFoo {} 
public class Bar : IFoo {} 
public class Blap : IFoo {} 
+2

Toute idée sur la nouvelle syntaxe pour StructureMap sur la façon de le faire? –

1

Dans les mots de la nouvelle syntaxe:

  For<IEncryptionService>() 
       .AddInstances(x => { x.OfConcreteType<AdvancedEncryptionService>().Named("Advanced"); }) 
       .Use<EncryptionService>(); 
Questions connexes