我想从 github 注册一个正在使用的中介器,它提供了使用 Autofac 注册它的示例。
我认为我的问题在于这条 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));但我收到以下错误:
DryIoc.ContainerException: '注册抽象实现类型 SimpleMediator.Core.IMessageHandler<,> 时应该是具体的。而且也没有 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 接口,程序会遇到错误:
System.ArgumentException:“未找到 DeviceEventMessage Arg_ParamName_Name 的签名 IMessageHandler`2 的处理程序”
基本上我的理解是我需要注册我定义的消息处理程序,它继承自IMessageHandler<,>
Mediator 定义 IMessageHandler 如下:
public interface IEventHandler<in TEvent>
    : IMessageHandler<TEvent, Unit> where TEvent : IMessage<Unit>
{
}我在服务中实现它:
public class Service2 : IService2, IEventHandler<DeviceEventMessage>
{    public async Task<Unit> HandleAsync(
        DeviceEventMessage message,
        IMediationContext mediationContext,
        CancellationToken cancellationToken)
    { 
           return Unit.Result;
    }
}其中 service1 实际上调用了GetDevice("asdf")需要解析处理程序的中介器。
我如何注册IMessageHandler<,>在DryIoc中实现的类?
互换的青春
相关分类