StructureMap使用Scan自动注册generics类型
我有一个界面:
IRepository where T : IEntity
我正在使用一些虚假的存储库实现来破坏我的UI,只返回任何旧数据。
它们看起来像这样:
public class FakeClientRepository : IRepository
目前我这样做:
ForRequestedType<IRepository>() .TheDefaultIsConcreteType();
但是对于我所有的IEntities都有很多次。 是否可以使用Scan自动注册我的所有虚假存储库以用于其各自的IRepository?
编辑:这是我得到的,但我得到错误说请求的类型没有注册:(
Scan(x => { x.TheCallingAssembly(); x.IncludeNamespaceContainingType(); x.AddAllTypesOf(typeof(IRepository)); x.WithDefaultConventions(); });
谢谢
安德鲁
有一种更简单的方法可以做到这一点。 有关详细信息,请参阅此博客文章: 高级StructureMap:将实现连接到打开generics类型
public class HandlerRegistry : Registry { public HandlerRegistry() { Scan(cfg => { cfg.TheCallingAssembly(); cfg.IncludeNamespaceContainingType(); cfg.ConnectImplementationsToTypesClosing(typeof(IRepository<>)); }); } }
这样做可以避免必须创建自己的ITypeScanner
或约定。
谢谢克里斯,这正是我所需要的。 为清楚起见,这是我在你的链接中所做的:
Scan(x => { x.TheCallingAssembly(); x.IncludeNamespaceContainingType(); x.With(); }); private class FakeRepositoryScanner : ITypeScanner { public void Process(Type type, PluginGraph graph) { Type interfaceType = type.FindInterfaceThatCloses(typeof(IRepository<>)); if (interfaceType != null) { graph.AddType(interfaceType, type); } } }
从StructureMap用户组中查看此讨论: http : //groups.google.com/group/structuremap-users/browse_thread/thread/649f5324c570347d