StructureMap对命名实例进行分组

时间:2011-02-18 12:54:20

标签: wcf validation structuremap

很长的帖子 - 对不起....

我正在为WCF服务进行输入验证,并使用StructureMap IoC来实例化相应的验证对象。 我有2个不同的验证组:

  1. 每个对象验证:表示一个输入参数将由Ioc解析(例如Ioc.ResolveAll<IValidatorObject<InputParameter1>,...... <InputParameter2> ...等)。如果找到任何规则,则调用validate方法。
  2. 每个上下文验证:表示根据当前上下文(显式角色)调用验证规则。背景可能是“存钱”或“开立银行账户”。上下文验证通常依赖于2个或更多输入参数,是对象和上下文验证之间的关键区别。
  3. 输入验证在IParameterInspector(提供者/服务器端!)中的BeforeCall事件调用中执行。通过这个事件,我得到一个包含操作名称(也就是上下文)的字符串和一个带有输入参数的对象[]。

    问题在于单个上下文有多个验证规则,而我在Ioc中注册上下文的唯一方法是使用命名的intances。但是我只能注册 1 命名实例pr。接口。并且接口不能通过其签名进行唯一标识。 E.g。

    • “创建帐户”的上下文规则:IValidatorContext<User, Account>
    • “存款”的上下文规则:IValidatorContext<User, Account>

    所以我的问题是,是否可以以任何其他方式在命名实例中注册StructureMap中的上下文 - 或者可能是对命名实例进行分组的方法。

    替代路由是为每个上下文实现显式接口,以便DepositMoney服务方法可能如下所示:

    public Response Deposit(IDepositMoney inputArguements)
    

    其中IDepositMoney包含输入参数。

    我离开这里,还是可以以某种方式在StructureMap中注册上下文?或者我应该继续使用显式接口(第三个选项?)

    提前致谢

2 个答案:

答案 0 :(得分:1)

结束在上下文中包装每组输入参数,并使用上下文在StructureMap中注册。像魅力一样工作!

答案 1 :(得分:0)

命名实例的整个想法是名称指向单个实例,因此您将无法使用该功能来执行您要实现的功能。我会使用显式接口,因为这将允许您自动连接更多东西并减少对容器的调用。