Использование файла конфигурации Unity, как зарегистрировать реализацию валидатора FluentValidation с бетоном в другой сборке

Я пытаюсь зарегистрировать реализацию 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 были настроены в конфигурации хоста.

Это вообще возможно? Если да, то укажите мне правильное направление. Приветствуются и любые другие решения. Спасибо, что нашли время, чтобы посмотреть на мой вопрос.


person user3253899    schedule 30.01.2014    source источник


Ответы (1)


Вы должны инициализировать свой контейнер в WCFHost и передать его ParameterInspector. WCFHost как корень композиции должен знать обо всех зависимостях и составлять их.

person Kirill Bestemyanov    schedule 30.01.2014