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>();
});
Genau das, was ich brauchte, danke –