Всем привет.
В моем приложении мне необходимо работать с API различных сервисов. Интерфейс для работы с этими API один. В нем определены методы проверки маркера доступа, получения определенных сущностей.
В чем проблема: интерфейс будет использоваться в приложении и в одном сервисе. В приложении будет нужно вызывать какие-то методы API от имени определенного пользователя. Например:
IApiClient apiClient; //резолвится с помощью Unity
if(apiClient.IsCurrentUserTokenValid()){
var entities = apiClient.getEntities();
//code
}
Unity будет резолвить IApiClient и передавать в конструктор ApiClientImpl маркер доступа текущего пользователя.
Кроме того, IApiClient будет использоваться в сервисе. Там необходимо будет пробегать по большому количеству пользователей, проверять их маркеры доступа, выполнять какие-то действия с API от имени разных пользователей. Пользователей может быть очень много.
Можно было бы сделать класс ApiClientImpl статическим, но я читал, что резолвить такую штуку c IoC не очень круто. Можно сделать обычный класс, но тогда для каждого пользователя необходимо будет создать экземпляр ApiClientImpl (а пользователей очень много). Не будет ли это нагружать сервак? Последний вариант, над которым я думал - сделать часть методов статическими. Но не знаю нормальным ли является этот вариант. В итоге будет что-то такое:
public interface IApiClient{
// токен текущего пользователя
string AccessToken{get;set;}
// проверяет валидность токена для текущего пользователя
bool IsCurrentUserTokenValid();
// [static] проверяет валидность токена
bool IsUserTokenValid(string token);
// получает сущности текущего пользователя
IEnumerable<Entity> GetCurrentUserEntities(EntityParams params);
// [static] получает сущности пользователя
IEnumerable<Entity> GetUserEntities(string token, EntityParams params);
}
Методов в интерфейсе много, не будет ли это как-то избыточно писать какой-то метод для текущего пользователя и статический для всех?
Вроде все просто, но я уже третий день не могу придумать как лучше сделать. Help me!