Я пытаюсь зарегистрировать реализацию FluentValidation.IValidator с помощью файла конфигурации Unity.
Реализация Validator находится в сборке, на которую указывает ссылка. Не уверен, важно это или нет.
У меня есть узел WCF с двумя ссылками (для простоты)
WCFHost.dll
- ParameterInspector.dll
- DataContracts.dll
ParameterInspector.dll создает экземпляр контейнера Unity и пытается разрешить тип. Если вы работали с ParameterInspectors, вы бы знали, что тип передается как объект, и я планирую использовать container.Resolve (obj.GetType ())
DataContracts.dll имеет DataContracts и реализацию Validator. Если вы знакомы с FluentValidation, я сделал следующее:
public class MyValidator: AbstractValidator<MyDataContract>
Теперь я предполагаю, что в файле конфигурации единства я должен каким-то образом зарегистрировать IValidator, чтобы каким-то образом сопоставить его с реализацией MyValidator, чтобы Unity знала, как построить объект?
Принимая во внимание, что контейнер Unity создается в ParameterInspector.dll, который не имеет ссылки на DataContracts.dll (тип передается как объект в соответствии с архитектурой конвейера WCF)
Конфигурация единства, очевидно, находится в WCFHost web.config, и я предполагаю, что теперь мне нужно указать единству, что FluentValidation.IValidator (MyDataContract, находящийся в DataContracts.dll) на самом деле является MyValidator.
Я бы предпочел сделать это в конфигурации, но он работает, если я зарегистрирую его с помощью кода (что означает, что ParameterInspector.dll нужна ссылка на DataContracts.dll). Это работает -
container.RegisterType<IValidator<MyDataContract>, MyValidator>(new ContainerControlledLifetimeManager());
Но это означает, что мне нужно ссылаться на DataContracts.dll из ParameterInspector.dll, чтобы разрешить реализацию Validator и тип DataContract, что означает, что он привязан к этому проекту и не может быть повторно использован для других DataContracts в дальнейшем. Я хотел бы, чтобы ParameterInspector.dll был максимально универсальным, а реализации Validator были настроены в конфигурации хоста.
Это вообще возможно? Если да, то укажите мне правильное направление. Приветствуются и любые другие решения. Спасибо, что нашли время, чтобы посмотреть на мой вопрос.