2009-03-22 7 views
11

Ich mag eine Structuremap benannte Instanz in Code erstellen, ohne KonfigurationsdateiWie eine Structuremap benannte Instanz in-Code definieren

Ich mag die Instanz wie diese erstellen können:

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

I kann einen solchen Code nicht definieren. Ich habe this Probe gefunden, aber es nutzt die alte Syntax einer früheren Version und definiert die benannte Instanz als:

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

In der neuesten Version StructureMap keine .AddConcreteType ist (instanceName) Methode, die eine Instanz Namen gibt.

Antwort

19

Ich glaube, Sie brauchen so etwas wie:

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

Jede Idee, auf die neue Syntax für StructureMap auf, wie dies zu tun? –

1

Mit den Worten neue Syntax:

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