StructureMap enregistrement automatique pour les types génériques en mode Numérisation
-
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
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