我有一个界面:
IRepositorywhere T : IEntity
我正在使用一些虚假的存储库实现来破坏我的UI,只返回任何旧数据.
它们看起来像这样:
public class FakeClientRepository : IRepository
目前我这样做:
ForRequestedType>() .TheDefaultIsConcreteType ();
但我所有的IEntities都有很多次.是否可以使用Scan自动注册我的所有虚假存储库以用于其各自的IRepository?
编辑:这是我得到的,但我得到错误说请求的类型没有注册:(
Scan(x => { x.TheCallingAssembly(); x.IncludeNamespaceContainingType(); x.AddAllTypesOf(typeof(IRepository<>)); x.WithDefaultConventions(); });
谢谢
安德鲁
有一种更简单的方法可以做到这一点.有关详细信息,请参阅此博客文章:高级StructureMap:将实现连接到打开泛型类型
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); } } }