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

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

將 Autofac 開放通用接口注冊轉(zhuǎn)換為 DryIoc 注冊

將 Autofac 開放通用接口注冊轉(zhuǎn)換為 DryIoc 注冊

C#
ibeautiful 2023-07-09 15:24:05
我想從 github 注冊一個(gè)正在使用的中介器,它提供了使用 Autofac 注冊它的示例。我認(rèn)為我的問題在于這條 Autofac 線:builder.RegisterAssemblyTypes(assembly) ????.AsClosedTypesOf(typeof(IMessageHandler<,>)) ????.AsImplementedInterfaces();AsClosedTypesOf更具體地說,我不是 100% 確定這行代碼的作用。我嘗試將其翻譯為 DryIoc:container.RegisterMany(? ???new?Type[]?{?typeof(IMessageHandler<,>)?}, ????serviceTypeCondition:?s?=>?s.IsInterface,? ????setup:?Setup.With(openResolutionScope:?true));但我收到以下錯(cuò)誤:DryIoc.ContainerException: '注冊抽象實(shí)現(xiàn)類型 SimpleMediator.Core.IMessageHandler<,> 時(shí)應(yīng)該是具體的。而且也沒有 FactoryMethod 可以替代。這是我到目前為止的注冊碼:? ? container.RegisterMany(? ? ? ? ? ? new Type[] { typeof(IMessageHandler<,>) },? ? ? ? ? ? serviceTypeCondition: s => s.IsInterface,?? ? ? ? ? ? setup: Setup.With(openResolutionScope: true));? ? ? ? //var assemblies = AppDomain.CurrentDomain.GetAssemblies().Where(a => !a.IsDynamic);? ? ? ? container.RegisterDelegate<ServiceFactoryDelegate>(c => t =>? ? ? ? {? ? ? ? ? ? return c.Resolve(t);? ? ? ? });? ? ? ? container.RegisterMany<ServiceFactory>();? ? ? ? container.RegisterMany<Mediator>();? ? ? ? container.RegisterMany(new Type[] { typeof(MessageProcessor<,>) });如果不使用 RegisterMany 作為 IMessageHandler 接口,程序會遇到錯(cuò)誤:System.ArgumentException:&ldquo;未找到 DeviceEventMessage Arg_ParamName_Name 的簽名 IMessageHandler`2 的處理程序&rdquo;基本上我的理解是我需要注冊我定義的消息處理程序,它繼承自IMessageHandler<,>Mediator 定義 IMessageHandler 如下:public?interface?IEventHandler<in?TEvent> ????:?IMessageHandler<TEvent,?Unit>?where?TEvent?:?IMessage<Unit> { }我在服務(wù)中實(shí)現(xiàn)它:public?class?Service2?:?IService2,?IEventHandler<DeviceEventMessage> {????public?async?Task<Unit>?HandleAsync( ????????DeviceEventMessage?message, ????????IMediationContext?mediationContext, ????????CancellationToken?cancellationToken) ????{? ???????????return?Unit.Result; ????} }其中 service1 實(shí)際上調(diào)用了GetDevice("asdf")需要解析處理程序的中介器。我如何注冊IMessageHandler<,>在DryIoc中實(shí)現(xiàn)的類?
查看完整描述

1 回答

?
互換的青春

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊

更新:修復(fù)了工作示例

添加s.GetGenericDefinitionOrNull()serviceTypeCondition

回答

例外正是關(guān)于這里的問題:

container.RegisterMany(
    new Type[] { typeof(IMessageHandler<,>) },
    serviceTypeCondition: s => s.IsInterface,
    setup: Setup.With(openResolutionScope: true));

RegisterMany重載期望第一個(gè)參數(shù)是具體實(shí)現(xiàn)類型的集合。

對于你的情況,你可能需要這樣的東西:

container.RegisterMany(
    new[] { typeof(Service1).GetAssembly() },
    serviceTypeCondition: s => s.GetGenericDefinitionOrNull() == typeof(IMessageHandler<,>));

順便說一句,不知道是什么原因openResolutionScope: true。


查看完整回答
反對 回復(fù) 2023-07-09
  • 1 回答
  • 0 關(guān)注
  • 172 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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