我想从 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中实现的类?
互换的青春
相关分类