2010-03-04 6 views

Antwort

16
funktionieren sollte

ich diesen Artikel gelesen hatte, aber es hat nicht gib mir was ich brauche. Die AddAllTypesOf registrierte alle konkreten Typen gegen das IRepositoryInterface, aber stattdessen benötige ich, dass jeder konkrete Typ gegen die Schnittstelle mit äquivalenter Benennung registriert wird. dh.

For<IMyRepository>().Use<SqlMyRepository>(); 

Auch ich muss einige benannte Instanzen für Test-Repositories erstellen.

For<IMyRepository>().Use<TestMyRepository>().Named("Test"); 

Hier ist, was ich kam, scheint zu arbeiten, wie ich es brauche.

public class SqlRepositoryConvention : StructureMap.Graph.IRegistrationConvention 
{ 
    public void Process(Type type, Registry registry) 
    { 
     // only interested in non abstract concrete types that have a matching named interface and start with Sql   
     if (type.IsAbstract || !type.IsClass || type.GetInterface(type.Name.Replace("Sql", "I")) == null) 
      return; 

     // Get interface and register (can use AddType overload method to create named types 
     Type interfaceType = type.GetInterface(type.Name.Replace("Sql","I")); 
     registry.AddType(interfaceType, type); 
    } 
} 

und umgesetzt als

Dank
Scan(cfg => 
      { 
       cfg.TheCallingAssembly(); 
       cfg.Convention<SqlRepositoryConvention>(); 
      }); 
+1

Genau das, was ich brauchte, danke –

1

prüfen http://codebetter.com/blogs/jeremy.miller/archive/2009/01/20/create-your-own-auto-registration-convention-with-structuremap.aspx

Insbesondere aus, um diesen Teil

 container = new Container(x => 

     { 

      x.Scan(o => 

      { 

       o.TheCallingAssembly(); 
       o.AddAllTypesOf<IController>().NameBy(type => type.Name.Replace("Controller", "")); 

      }); 

     }); 

für Sie Also, ich glaube, so etwas wie dieses

 container = new Container(x => 

     { 

      x.Scan(o => 

      { 

       o.TheCallingAssembly(); 
       o.AddAllTypesOf<IRepository>().NameBy(type => type.Name.Replace("I", "Sql")); 

      }); 

     }); 
+0

folgt, werde ich das versuchen. –

Verwandte Themen