我正在实现一个带有请求处理程序的系统,其中有多个版本的请求。我有一个接口,IServiceRequestHandler,它处理请求T.因为有很多共享代码,我想组合不同版本的处理程序:
public class ARequestHandler : IServiceRequestHandler<V1.ARequest>, IServiceRequestHandler<V2.ARequest>
这实现了handle()方法的2个不同版本,这是该接口上唯一的方法。
但是,在我扫描时在我的structuremap注册表类中:
Scan(a =>
{
a.TheCallingAssembly();
a.AddAllTypesOf(typeof(IServiceRequestHandler<>));
});
它将ARequestHandler注册为V1.ARequest的实例,但不是V2.ARequest。所以:
container.GetInstance<IServiceRequestHandler<V1.ARequest>>()
返回ARequestHandler,但是:
container.GetInstance<IServiceRequestHandler<V2.ARequest>>()
抛出异常,说没有实例存在。
我不一定需要它们返回相同的处理程序实例,但我希望它们至少返回相同处理程序类型的实例。我在这里错过了什么吗?
我知道我可以在注册表中使用单独的For行注册它们并且这样可行,但我会有很多处理程序,并且真的不想更新所有这些的注册表,这就是扫描方法的重点。
这似乎应该可行,但这可能只是扫描方法的限制。