c# structuremap

c# structure map



StructureMap Registro automático para tipos genéricos usando Scan (3)

Eche un vistazo a esta discusión del grupo de usuarios de StructureMap: http://groups.google.com/group/structuremap-users/browse_thread/thread/649f5324c570347d

Tengo una interfaz:

IRepository<T> where T : IEntity

mientras estoy destruyendo mi interfaz de usuario usando algunas implementaciones de repositorio falsas que simplemente devuelven cualquier dato anterior.

Se ven así:

public class FakeClientRepository : IRepository<Client>

En este momento estoy haciendo esto:

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

pero un montón de veces para todos mis IEntities. ¿Es posible usar Scan para auto registrar todos mis repositorios falsos para su respectivo IRepository?

Editar: esto es lo más lejos que tengo, pero recibo errores que dicen que el tipo solicitado no está registrado :(

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

Gracias

Andrés


Hay una manera más fácil de hacer esto. Consulte la publicación de este blog para obtener más detalles: Advanced StructureMap: conectar implementaciones para abrir tipos genéricos

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

Hacerlo de esta manera evita tener que crear su propio ITypeScanner o convenciones.


Gracias Chris , eso es exactamente lo que necesitaba. Para mayor claridad, aquí está lo que hice de su enlace:

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