protected override void Load(ContainerBuilder builder) { builder.RegisterType <MessageProvider>().As <IMessageProvider>().SingleInstance(); builder.RegisterType <ProtoMessageSender>().As <IProtoMessageSender>().SingleInstance(); builder.RegisterType <MessageAttributeHandler>().SingleInstance(); builder.RegisterBuildCallback(t => t.Resolve <MessageAttributeHandler>().Start()); builder.RegisterType <ProtoEncoder>(); builder.RegisterType <MessageFrameEncoder>(); builder.RegisterType <MessageHeaderDecoder>(); builder.RegisterInstance(new ProtoMessageCodecHandler(_messageCodecTypes)) .As <IStartable>() .AsSelf() .SingleInstance(); builder.RegisterType <MessageChannelHandler>(); #region Attribute types MessageAttributeHandler.RegisterHandlers(builder); #endregion #region Decoders ProtoMessageCodecHandler.GetExporedTypesForCodec(_messageCodecTypes) .ToList() .ForEach(type => { var descriptor = (MessageDescriptor)type.GetProperty("Descriptor", BindingFlags.Public | BindingFlags.Static).GetValue(null, null); // get the static property Descriptor var codecExists = descriptor.CustomOptions.TryGetMessage <MessageCodec>(2001, out var messageCodec); if (codecExists && !messageCodec.Custom) { Type messageHandlerType = typeof(MessageDecoderBase <>).MakeGenericType(type); builder.RegisterType(messageHandlerType) .AsImplementedInterfaces() .SingleInstance(); } }); base.Load(builder); #endregion }
public ProtoMessageSender(ProtoMessageCodecHandler protoMessageCodecHandler) { _protoMessageCodecHandler = protoMessageCodecHandler; }
public MessageHeaderDecoder(IMessageDecoder[] messageDecoders, ProtoMessageCodecHandler protoMessageCodecHandler) { _messageDecoders = messageDecoders; _protoMessageCodecHandler = protoMessageCodecHandler; }