public MessengerBase <TKey> AddRequest <TRequestObject, TResult>(Func <TRequestObject, Task <TResult> > func) where TRequestObject : class, IRequestObject <TKey> { var container = new RequestResultContainer(typeof(TRequestObject), typeof(TResult)); var request = new RequestWrapper <TKey, TRequestObject, TResult>(); asyncRequests.Add(container, request.InitAsync(func)); return(this); }
public virtual TResult ReceiveQuery <TResult>(IRequestObject <TKey> request) { RequestResultContainer _iRequest = requests.Keys.FirstOrDefault(x => x.HasRequestedTypeAndExpectedResult(request.GetType(), typeof(TResult))); if (_iRequest == null) { throw new KeyNotFoundException(); } return((TResult)requests[_iRequest].InvokeRequest(request)); }