I've never used the in-process model, only the remote model... When you're using Agatha with a remote service, you should try to take advantage of sending batches of requests. When you send a batch of requests, you're going to have to retrieve the responses someway. That's why you need to call the Clear method before you can send new requests (otherwise the new responses would overwrite the old ones).
The in-process model was added later, simply because somebody asked and it was very easy to do. But the default RequestDispatcher (which requires the usage of Clear for subsequent service calls) has been written with remote usage in mind. In your case, you could provide your own implemention of IRequestDispatcher which automatically calls Clear when you get the response.
For instance, if you only use the
Get<TResponse>(Request request) method, you could provide an IRequestDispatcher implementation with the following implementation of that method:
public virtual TResponse Get<TResponse>(Request request) where TResponse : Response
{
Add(request);
var response = Get<TResponse>();
Clear();
return response;
}
that would of course break the behavior of every other Get method, but you could provide different implementations for them too if you want