我有一个界面:
IRepository<T> where T : IEntity
而在敲击我的UI im使用一些假的存储库实现,只是返回任何旧的数据.
他们看起来像这样:
public class FakeClientRepository : IRepository<Client>
现在这样做:
ForRequestedType<IRepository<Client>>() .TheDefaultIsConcreteType<FakeRepositories.FakeClientRepository>();
但是对于我所有的IEntities来说,这个时间是多少.是否可以使用Scan来自动注册我所有的虚拟存储库以进行各自的存储库?
编辑:这是我得到的,但我收到错误说请求的类型isnt注册:(
Scan(x => { x.TheCallingAssembly(); x.IncludeNamespaceContainingType<FakeRepositories.FakeClientRepository>(); x.AddAllTypesOf(typeof(IRepository<>)); x.WithDefaultConventions(); });
谢谢
安德鲁
解决方法
有一个更简单的方法来做到这一点.详情请看这篇博文:
Advanced StructureMap: connecting implementations to open generic types
public class HandlerRegistry : Registry { public HandlerRegistry() { Scan(cfg => { cfg.TheCallingAssembly(); cfg.IncludeNamespaceContainingType<FakeRepositories.FakeClientRepository>(); cfg.ConnectImplementationsToTypesClosing(typeof(IRepository<>)); }); } }
这样做避免了创建自己的ITypeScanner或约定.