2009-03-22 14 views
11

Chcę stworzyć StructureMap nazwane wystąpienie w kodzie, bez pliku konfiguracyjnegoJak zdefiniować StructureMap wystąpienie nazwane w Kodeksie

Chcę móc utworzyć instancję tak:

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

I Nie mogę zdefiniować takiego typu w kodzie. Znalazłem this próbkę ale używa starej składni poprzedniej wersji i określa wystąpienie nazwane jako:

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

W najnowszej wersji StructureMap nie istnieje metoda .AddConcreteType (instanceName), która pobiera nazwę instancji.

Odpowiedz

19

wierzę trzeba coś takiego:

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

Każdy pomysł na nową składnię dla StructureMap w jaki sposób to zrobić? –

1

w słowach nowej składni:

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