2017-02-21 7 views
1

Я столкнулся с проблемой в своем первом проекте IMediatR, Autofac MVC. Помощь очень ценится. Спасибо заранее!Регистрация обработчика MedicR Autofac в контейнере

Обработчик не был найден для запроса типа SliceProject.Services.Query.GetUserListQuery. Контейнер или услуга Локатор не настроен должным образом или обработчики, не зарегистрированные в вашем контейнере .

Autofac Контейнер Код:

builder 
    .RegisterAssemblyTypes(typeof(IRequest<>).Assembly) 
    .Where(t => t.IsClosedTypeOf(typeof(IRequest<>))) 
    .AsImplementedInterfaces();  

builder 
    .RegisterAssemblyTypes(typeof(IRequestHandler<,>).Assembly) 
    .Where(t => t.IsClosedTypeOf(typeof(IRequestHandler<,>))) 
    .AsImplementedInterfaces(); 

ответ

2

Это потому, что вы говорите Autofac смотреть в сборку, которая содержит IRequestHandler<TRequest, TResponse> типа. Этот тип живет в сборке MediatR, поэтому нет никаких шансов, что ваши обработчики будут жить в этой сборке.

У вас должна быть возможность регистрации, чтобы она выглядела в сборке (-ях), где определены ваши обработчики. Если все они определены в одной отдельной сборке, выберите один обработчик и используйте его как тип маркера. Я пытался угадать имя одного из обработчиков здесь:

builder 
    .RegisterAssemblyTypes(typeof(GetUserListQueryHandler).Assembly) 
    .Where(t => t.IsClosedTypeOf(typeof(IRequestHandler<,>))) 
    .AsImplementedInterfaces(); 

Пожалуйста, обратите внимание, что регистрация может быть проще с Funciton предоставленной Autofac, AsClosedTypesOf. Он делает то же самое.

builder 
    .RegisterAssemblyTypes(typeof(GetUserListQueryHandler).Assembly) 
    .AsClosedTypesOf(typeof(IRequestHandler<,>))); 

Наконец, и это немного не связаны, но почему вы пытаетесь зарегистрировать ваши запросы в контейнере? Запросы обычно создаются специальным кодом и не разрешаются из контейнера. В вашем случае это также не имеет никакого эффекта, поскольку вы допустили ту же ошибку, что и для обработчиков, которая ищет запросы в сборке MediatR, которая не содержит реализаций IRequest<TResponse>.

 Смежные вопросы

  • Нет связанных вопросов^_^