2009-02-05 17 views
9

का उपयोग कर सामान्य प्रकार के लिए StructureMap ऑटो पंजीकरण मैं एक अंतरफलक है:स्कैन

IRepository<T> where T : IEntity 

जबकि im कुछ नकली भंडार कार्यान्वयन है कि बस किसी भी पुराने डेटा वापस का उपयोग कर मेरी यूआई im अप दस्तक।

वे इस तरह दिखेगा:

public class FakeClientRepository : IRepository<Client> 

पल im ऐसा करने पर:

ForRequestedType<IRepository<Client>>() 
    .TheDefaultIsConcreteType<FakeRepositories.FakeClientRepository>(); 

लेकिन मेरे सारे IEntities के लिए बार का भार। क्या स्कैन का उपयोग अपने सभी नकली भंडारों को अपने संबंधित आईआरपोजिटरी के लिए ऑटो रजिस्टर करने के लिए करना संभव है?

संपादित करें: इस जहाँ तक मुझे मिल गया है, लेकिन मैं त्रुटियों कह अनुरोध किया प्रकार नहीं है पंजीकृत :(

Scan(x => 
{ 
    x.TheCallingAssembly(); 
    x.IncludeNamespaceContainingType<FakeRepositories.FakeClientRepository>(); 
    x.AddAllTypesOf(typeof(IRepository<>)); 
    x.WithDefaultConventions(); 
}); 

धन्यवाद

एंड्रयू

उत्तर

13

ऐसा करने का एक आसान तरीका है। कृपया विवरण के लिए इस ब्लॉग पोस्टिंग देखें: Advanced StructureMap: connecting implementations to open generic types

public class HandlerRegistry : Registry 
{ 
    public HandlerRegistry() 
    { 
     Scan(cfg => 
     { 
      cfg.TheCallingAssembly(); 
      cfg.IncludeNamespaceContainingType<FakeRepositories.FakeClientRepository>(); 
      cfg.ConnectImplementationsToTypesClosing(typeof(IRepository<>)); 
     }); 
    } 
} 

कर रहा इस तरह से अपने खुद के ITypeScanner या सम्मेलनों बनाने के लिए होने टाल।

6

धन्यवाद Chris, बिल्कुल वही है जो मुझे चाहिए। स्पष्टता के लिए, मैं क्या करता हूं आईडी से आपके लिंक:

Scan(x => 
{ 
    x.TheCallingAssembly(); 
     x.IncludeNamespaceContainingType<FakeRepositories.FakeClientRepository>(); 
    x.With<FakeRepositoryScanner>(); 
}); 


private class FakeRepositoryScanner : ITypeScanner 
{ 
    public void Process(Type type, PluginGraph graph) 
    { 
     Type interfaceType = type.FindInterfaceThatCloses(typeof(IRepository<>)); 
     if (interfaceType != null) 
     { 
      graph.AddType(interfaceType, type); 
     } 
    } 
} 
संबंधित मुद्दे