Пример #1
0
        public TReply Send <TRequest, TReply>(TRequest message)
            where TRequest : IMessageRequest
            where TReply : IMessageReply
        {
            IMessageHandlerWithReply <TRequest, TReply> messageHandler = factory.Create <TRequest, TReply>();

            if (messageHandler == null)
            {
                throw new UnregisteredMessageException();
            }

            return(messageHandler.Handle(message));
        }
        public IMessageHandlerWithReply <TRequest, TReply> Create <TRequest, TReply>()
            where TRequest : IMessageRequest
            where TReply : IMessageReply
        {
            IMessageHandlerWithReply <TRequest, TReply> result = null;

            try
            {
                result = dependencyResolver.GetServices <IMessageHandlerWithReply <TRequest, TReply> >().FirstOrDefault();
            }
            catch { }

            return(result);
        }
Пример #3
0
        public IMessageHandlerWithReply <TRequest, TReply> Create <TRequest, TReply>()
            where TRequest : IMessageRequest
            where TReply : IMessageReply
        {
            IMessageHandlerWithReply <TRequest, TReply> result = null;
            var messageHandlerInfo = (from messageHandlerAssembly in messageHandlerAssemblyList
                                      from type in messageHandlerAssembly.GetTypes()
                                      where type.GetInterfaces().Any((Type e) => e.IsGenericType && e.GetGenericTypeDefinition() == typeof(IMessageHandlerWithReply <,>) &&
                                                                     e.GetGenericArguments().Any((Type x) => x == typeof(TRequest)) && e.GetGenericArguments().Any((Type x) => x == typeof(TReply)))
                                      select new
            {
                Assembly = messageHandlerAssembly,
                Type = type
            }).FirstOrDefault();

            if (messageHandlerInfo != null)
            {
                result = (messageHandlerInfo.Assembly.CreateInstance(messageHandlerInfo.Type.FullName) as IMessageHandlerWithReply <TRequest, TReply>);
            }

            return(result);
        }