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); }
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); }