registrazione StructureMap Auto per i tipi generici utilizzando Scan
-
21-08-2019 - |
Domanda
Ho un'interfaccia:
IRepository<T> where T : IEntity
mentre im bussare la mia UI im utilizzando alcune implementazioni repository falsi che solo restituiscono tutti i vecchi dati.
Si guardano in questo modo:
public class FakeClientRepository : IRepository<Client>
Al momento sto facendo questo:
ForRequestedType<IRepository<Client>>()
.TheDefaultIsConcreteType<FakeRepositories.FakeClientRepository>();
, ma un sacco di volte per tutti i miei IEntities. E 'possibile utilizzare la scansione automatica per registrare tutti i miei repository falsi per il suo rispettivo IRepository?
Edit: questo è quanto ho ottenuto, ma ho errori dicendo che il tipo è neanche richiesto registrata: (
Scan(x =>
{
x.TheCallingAssembly();
x.IncludeNamespaceContainingType<FakeRepositories.FakeClientRepository>();
x.AddAllTypesOf(typeof(IRepository<>));
x.WithDefaultConventions();
});
Grazie
Andrew
Soluzione
C'è un modo più semplice per fare questo. Si prega di vedere questo post di blog per i dettagli: Avanzate StructureMap: collegamento implementazioni per aprire i tipi generici
public class HandlerRegistry : Registry
{
public HandlerRegistry()
{
Scan(cfg =>
{
cfg.TheCallingAssembly();
cfg.IncludeNamespaceContainingType<FakeRepositories.FakeClientRepository>();
cfg.ConnectImplementationsToTypesClosing(typeof(IRepository<>));
});
}
}
Facendo in questo modo evita di dover creare il proprio ITypeScanner
o convenzioni.
Altri suggerimenti
Chris , questo è esattamente quello che mi serviva. Per chiarezza, ecco quello che ho fatto dal tuo link:
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);
}
}
}
Date un'occhiata a questo dibattito dal gruppo utenti StructureMap: http : //groups.google.com/group/structuremap-users/browse_thread/thread/649f5324c570347d