/// <inheritdoc /> public Either <IError, CapabilityClient <TArgument, TReturn> > GetCapability <TICapability, TArgument, TReturn>() where TICapability : ICapabilityDefinition { var name = CapabilityUtilities.GetCapabilityName <TICapability>(); return(!_negotiator.Negotiate(_requestSocket) ? new Left <IError, CapabilityClient <TArgument, TReturn> >(new UnsuccessfulNegotiationWithServer()) : GetCapabilityFromServer(name) .Map(info => new CapabilityClient <TArgument, TReturn>(_requestSocket, info, _encryptor))); }
/// <inheritdoc /> public void Register <TCapability>() where TCapability : ICapability, new() { var name = CapabilityUtilities.GetCapabilityName <TCapability>(); lock (_registry) { if (_registry.Contains(name)) { throw new CapabilityAlreadyRegisteredException(); } _registry.Add(name, new TCapability()); } }