第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 MediatR 和 Autofac 的組件注冊問題

使用 MediatR 和 Autofac 的組件注冊問題

C#
尚方寶劍之說 2021-12-25 18:41:14
我正在使用 Autofac 和 MediatR 構(gòu)建基于 CQRS 的 .Net Core 2.1 應(yīng)用程序。public class MediatorModule : Autofac.Module{    protected override void Load(ContainerBuilder builder)    {        builder.RegisterAssemblyTypes(typeof(IMediator).GetTypeInfo().Assembly).AsImplementedInterfaces();        var mediatrOpenTypes = new[]        {            typeof(IRequestHandler<,>),            typeof(INotificationHandler<>),        };        foreach (var mediatrOpenType in mediatrOpenTypes)        {            builder                .RegisterAssemblyTypes(typeof(CreateMessageCommand.GetTypeInfo().Assembly)                .AsClosedTypesOf(mediatrOpenType)                .AsImplementedInterfaces();        }        builder.RegisterGeneric(typeof(RequestPostProcessorBehavior<,>)).As(typeof(IPipelineBehavior<,>));        builder.RegisterGeneric(typeof(RequestPreProcessorBehavior<,>)).As(typeof(IPipelineBehavior<,>));        builder.Register<ServiceFactory>(ctx =>        {            var c = ctx.Resolve<IComponentContext>();            return t => c.Resolve(t);        });    }}當我將命令提供給中介時,它工作得很好,并且命令處理程序上的 Handle() 被執(zhí)行。var cmd = new CreateMessageCommand("Foo")_mediator.Send(cmd)當我以這種方式執(zhí)行時,事情并不順利var cmd = new CreateMessageCommand("Foo")var req = new IdentifiedCommand<CreateMessageCommand, bool>(cmd, @event.Id);await _mediator.Send(req);
查看完整描述

2 回答

?
絕地?zé)o雙

TA貢獻1946條經(jīng)驗 獲得超4個贊

您發(fā)送給 MediatR 的命令類型為IdentifiedCommand<CreateMessageCommand, bool>。因此 MediatR 將尋找類型為 的處理程序IRequestHandler<IdentifiedCommand<CreateMessageCommand, bool>, bool>>

DI 容器通常會首先尋找完全匹配的對象,然后考慮開放的泛型類型注冊。在這種情況下,它將查找IRequestHandler<,>注冊,并為其插入類型參數(shù)IdentifiedCommand<CreateMessageCommand, bool>、 和bool。但是,您的命令處理程序沒有實現(xiàn)IRequestHandler<T, R>,而是實現(xiàn)了IRequestHandler<IdentifiedCommand<T, R>, R>不適合于此的。因此 DI 容器沒有找到處理程序并且會引發(fā)該錯誤。

為了使其工作,您必須以 DI 容器查找它的方式實現(xiàn)該類型。所以你將不得不實施IRequestHandler<T, R>

不幸的是,這也意味著您無法使用類型安全的方式IdentifiedCommand<T, R>在處理程序中接受。相反,您只會收到一個T您必須處理的請求。


查看完整回答
反對 回復(fù) 2021-12-25
?
狐的傳說

TA貢獻1804條經(jīng)驗 獲得超3個贊

添加這個解決了我的問題。


builder.RegisterType(typeof(IdentifiedCommandHandler<CreateMessageCommand, bool>))

    .As<IRequestHandler<IdentifiedCommand<CreateMessageCommand, bool>, bool>>()

    .AsImplementedInterfaces();


查看完整回答
反對 回復(fù) 2021-12-25
  • 2 回答
  • 0 關(guān)注
  • 495 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號