2009-03-22 16 views
11

Tôi muốn tạo ra một trường hợp StructureMap có tên trong mã, mà không cần tập tin cấu hìnhLàm thế nào để xác định một StructureMap tên dụ trong Mã

Tôi muốn để có thể tạo ra các trường hợp như thế này:

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

tôi không thể xác định một loại như vậy trong mã. Tôi đã tìm thấy this mẫu nhưng nó sử dụng các cú pháp cũ của một phiên bản trước và xác định các trường hợp được đặt tên như:

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

Trong phiên bản mới nhất StructureMap không có phương pháp .AddConcreteType (instanceName) mà phải mất một tên ví dụ.

Trả lời

19

Tôi tin rằng bạn cần một cái gì đó như:

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

Bất kỳ ý tưởng về cú pháp mới cho StructureMap về cách làm này? –

1

Trong những lời của cú pháp mới:

  For<IEncryptionService>() 
       .AddInstances(x => { x.OfConcreteType<AdvancedEncryptionService>().Named("Advanced"); }) 
       .Use<EncryptionService>(); 
Các vấn đề liên quan