很长的帖子 - 对不起....
我正在为WCF服务进行输入验证,并使用StructureMap IoC来实例化相应的验证对象。 我有2个不同的验证组:
Ioc.ResolveAll<IValidatorObject<InputParameter1>
,...... <InputParameter2>
...等)。如果找到任何规则,则调用validate方法。 输入验证在IParameterInspector(提供者/服务器端!)中的BeforeCall事件调用中执行。通过这个事件,我得到一个包含操作名称(也就是上下文)的字符串和一个带有输入参数的对象[]。
问题在于单个上下文有多个验证规则,而我在Ioc中注册上下文的唯一方法是使用命名的intances。但是我只能注册 1 命名实例pr。接口。并且接口不能通过其签名进行唯一标识。 E.g。
IValidatorContext<User, Account>
IValidatorContext<User, Account>
所以我的问题是,是否可以以任何其他方式在命名实例中注册StructureMap中的上下文 - 或者可能是对命名实例进行分组的方法。
替代路由是为每个上下文实现显式接口,以便DepositMoney服务方法可能如下所示:
public Response Deposit(IDepositMoney inputArguements)
其中IDepositMoney包含输入参数。
我离开这里,还是可以以某种方式在StructureMap中注册上下文?或者我应该继续使用显式接口(第三个选项?)
提前致谢
答案 0 :(得分:1)
结束在上下文中包装每组输入参数,并使用上下文在StructureMap中注册。像魅力一样工作!
答案 1 :(得分:0)
命名实例的整个想法是名称指向单个实例,因此您将无法使用该功能来执行您要实现的功能。我会使用显式接口,因为这将允许您自动连接更多东西并减少对容器的调用。