我有一个界面:
IRepository<T> where T : IEntity
Run Code Online (Sandbox Code Playgroud)
我正在使用一些虚假的存储库实现来破坏我的UI,只返回任何旧数据.
它们看起来像这样:
public class FakeClientRepository : IRepository<Client>
Run Code Online (Sandbox Code Playgroud)
目前我这样做:
ForRequestedType<IRepository<Client>>()
.TheDefaultIsConcreteType<FakeRepositories.FakeClientRepository>();
Run Code Online (Sandbox Code Playgroud)
但我所有的IEntities都有很多次.是否可以使用Scan自动注册我的所有虚假存储库以用于其各自的IRepository?
编辑:这是我得到的,但我得到错误说请求的类型没有注册:(
Scan(x =>
{
x.TheCallingAssembly();
x.IncludeNamespaceContainingType<FakeRepositories.FakeClientRepository>();
x.AddAllTypesOf(typeof(IRepository<>));
x.WithDefaultConventions();
});
Run Code Online (Sandbox Code Playgroud)
谢谢
安德鲁
JD *_*toy 14
有一种更简单的方法可以做到这一点.有关详细信息,请参阅此博客文章:高级StructureMap:将实现连接到打开泛型类型
public class HandlerRegistry : Registry
{
public HandlerRegistry()
{
Scan(cfg =>
{
cfg.TheCallingAssembly();
cfg.IncludeNamespaceContainingType<FakeRepositories.FakeClientRepository>();
cfg.ConnectImplementationsToTypesClosing(typeof(IRepository<>));
});
}
}
Run Code Online (Sandbox Code Playgroud)
这样做可以避免必须创建自己的ITypeScanner或约定.
由于克里斯,那正是我需要的.为清楚起见,这是我从你的链接做了什么:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6741 次 |
| 最近记录: |