高水平
使用 StructureMap,我可以为接口定义一个程序集扫描规则,该规则IRequestService<T>
将返回名为 TRequestService 的对象
例子:
FooRequestService
IRequestService<FooRequest>
在请求时注入BarRequestService
IRequestService<BarRequest>
在请求时注入
细节
我定义了一个通用接口
public interface IRequestService<T> where T : Request
{
Response TransformRequest(T request, User current);
}
然后我有多个实现这个接口的请求对象
public class FooRequestService : IRequestService<Foo>
{
public Response TransformRequest(Foo request, User current) { ... }
}
public class BarRequestService : IRequestService<Bar>
{
public Response TransformRequest(Bar request, User current) { ... }
}
现在我需要注册这些类,以便 StructureMap 知道如何创建它们,因为在我的控制器中我想要以下 ctor(我希望 StructureMap 将其FooRequestService
注入)
public MyController(IRequestService<Foo> fooRequestService) { ... }
现在为了解决我的问题,我实现了一个空接口,而不是FooRequestService
实现通用接口,我让它实现了这个空接口
public interface IFooRequestService : IRequestService<Foo> { }
然后我的控制器 ctor 看起来像这样,它与 StructureMaps 的 Default Convention Scanner 一起使用
public MyController(IFooRequestService fooRequestService) { ... }
我如何使用 StructureMap 的程序集扫描器创建一个规则来注册所有名为 TRequestService 的对象IRequestService<T>
(其中 T = "Foo"、"Bar" 等),这样我就不必创建这些空的接口定义?
为了将其他东西加入其中,我正在处理 StructureMap 的程序集扫描没有对定义的程序集的任何引用,IRequestService<T>
因此在执行此操作时必须使用某种反射。我扫描了“使用 Scan 为泛型类型自动注册 StructureMap 自动注册”的答案,但似乎该答案需要引用包含接口定义的程序集。
我正在尝试编写自定义 StructureMap.Graph.ITypeScanner,但我有点坚持在那里做什么(主要是因为我对反射的经验很少)。