我想從 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:“未找到 DeviceEventMessage Arg_ParamName_Name 的簽名 IMessageHandler`2 的處理程序”基本上我的理解是我需要注冊我定義的消息處理程序,它繼承自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)的類?
將 Autofac 開放通用接口注冊轉(zhuǎn)換為 DryIoc 注冊
ibeautiful
2023-07-09 15:24:05