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

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top