2009-03-22 8 views
11

Quiero crear una instancia StructureMap nombre en clave, sin el archivo de configuración¿Cómo definir una instancia con nombre StructureMap en el Código

Quiero ser capaz de crear la instancia de la siguiente manera:

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

I no se puede definir dicho tipo en el código. He encontrado this muestra pero utiliza la vieja sintaxis de una versión anterior y define la instancia con nombre como:

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

En la última versión StructureMap no existe un método .AddConcreteType (instanceName) que tiene un nombre de instancia.

Respuesta

19

creo que necesita algo como:

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

Cualquier idea sobre la nueva sintaxis para StructureMap sobre cómo hacer esto? –

1

En palabras de nueva sintaxis:

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