Длинный пост - извините ....
Я делаю проверку ввода для службы WCF и использую IoC StructureMap для создания экземпляров соответствующих объектов проверки.У меня есть две разные группы проверки:
- Для проверки объекта: означает, что один входной параметр будет разрешен Ioc (например,
Ioc.ResolveAll<IValidatorObject<InputParameter1>
, .... <InputParameter2>
... и т. Д.),Если какие-либо правила найдены, вызывается метод validate. - За проверку контекста: означает, что правила проверки вызываются на основе текущего контекста (явные роли).Контекстом может быть «депозитные деньги» или «открыть банковский счет».Проверка контекста обычно зависит от 2 или более входных параметров и является ключевым отличием проверки объекта и контекста.
Проверка входных данных выполняется при вызове события BeforeCall в IParameterInspector (поставщик / сервер)боковая сторона!).С этим событием я получаю строку, содержащую имя операции (или контекст) и объект [] с входными параметрами.
Проблема в том, что существует несколько правил проверки для одного контекста, и единственный способ, с помощью которого я понял, зарегистрировать контекст в Ioc, - это использовать именованные экземпляры.Однако я могу зарегистрировать только 1 именованный экземпляр pr.интерфейс.И интерфейс не уникально идентифицируется своей подписью.Например,
- Правило контекста для «создания аккаунта»:
IValidatorContext<User, Account>
- Правило контекста для «депозита денег»:
IValidatorContext<User, Account>
Итак, мой вопросесть ли возможность зарегистрировать контекст в StructureMap любым другим способом, кроме именованных экземпляров, или, возможно, способ группировки именованных экземпляров.
Альтернативным маршрутом является реализация явных интерфейсов для каждого контекста, чтобы метод сервиса DepositMoney мог выглядеть следующим образом:
public Response Deposit(IDepositMoney inputArguements)
, где IDepositMoney содержит входные параметры.
Так я здесь, или я могу как-то зарегистрировать контекст в StructureMap?Или я должен просто пойти дальше и использовать явный интерфейс (3-й вариант?)
Заранее спасибо