StructureMap enregistrement automatique pour les types génériques en mode Numérisation

StackOverflow https://stackoverflow.com/questions/516892

  •  21-08-2019
  •  | 
  •  

Question

J'ai une interface:

IRepository<T> where T : IEntity

alors im frapper mon im en utilisant l'interface utilisateur certaines implémentations de dépôt de faux qui renvoient simplement les anciennes données.

Ils ressemblent à ceci:

public class FakeClientRepository : IRepository<Client>

Au moment im faire ceci:

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

mais les charges de temps pour tous mes IEntities. Est-il possible d'utiliser Scan to enregistrer automatiquement tous mes dépôts faux pour ses IRepository respectifs?

Edit: cela est aussi loin que je suis arrivé, mais je reçois des erreurs disant que le isnt de type demandé enregistré: (

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

Merci

Andrew

Était-ce utile?

La solution

Il y a un moyen plus facile de le faire. S'il vous plaît voir cette annonce blog pour plus de détails: Avancé StructureMap: connecter les implémentations pour ouvrir des types génériques

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

En procédant ainsi, évite d'avoir à créer vos propres conventions ou ITypeScanner.

Autres conseils

Merci Chris , c'est exactement ce que je avais besoin. Pour plus de clarté, voici ce que je l'ai fait de votre lien:

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);
        }
    }
} 

Jetez un oeil à cette discussion du groupe d'utilisateurs StructureMap: http : //groups.google.com/group/structuremap-users/browse_thread/thread/649f5324c570347d

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top