C# · 12月 27, 2021

c# – StructureMap使用扫描自动注册通用类型

我有一个界面: 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或约定.