Кто бы ни упаковывал используемый вами pgAdmin 4, он упаковывал его с клиентом PostgreSQL v10.
Так вот, где вам придется жаловаться.
В данном случае это, очевидно, Дейв Пейдж.
На сайте изображения Docker ( https://hub.docker.com/r/dpage/pgadmin4/ ) предлагается:
Пожалуйста, сообщайте о любых проблемах через Каналы поддержки pgAdmin. См. https://www.pgadmin.org/support/list/
blockquote>. Поэтому, я думаю, правильный канал - подписаться на этот список рассылки и озвучить там свою жалобу.
Извините, что это так сложно, но различные инструменты во вселенной PostgreSQL поддерживаются разными, хотя и несколько связанными, группами, каждая из которых имеет свои каналы.
Иметь абстрактный интерфейс HttpContext.Current. Выставляйте только нужные вам методы. GetUserName ()
, например, вызовет HttpContext.Current.User.Identity.Name в реализации. Сделайте это как можно тоньше.
Возьмите эту абстракцию и вставьте ее в другой класс вашего провайдера. Это позволит вам протестировать провайдера, высмеивая абстракцию контекста http. В качестве дополнительного преимущества с этой абстракцией HttpContext вы можете делать другие изящные вещи, помимо имитации. Во-первых, используйте его повторно. Добавьте параметры универсального типа в пакеты и т. Д.
Не понимаю, почему вы так беспокоитесь. Кажется, что просто использовать HttpContext.Current непосредственно в HttpContextUserProvider - это правильное решение. Вы никогда не собираетесь выполнять замену в другом HttpContext ...
Возможно, я что-то упустил, но приведенный выше ответ не работает для меня (с тех пор был удален - хотя это все еще был полезный ответ - он показал, как сказать SM пройти аргументы конструктора). Вместо этого, если я сделаю:
ObjectFactory.Initialize(x =>
{
x.BuildInstancesOf<HttpContext>()
.TheDefault.Is.ConstructedBy(() => HttpContext.Current);
x.ForRequestedType<IUserProvider>()
.TheDefault.Is.OfConcreteType<HttpContextUserProvider>();
});
Я заставлю его работать. Я сделал это после того, как нашел: http://codebetter.com/blogs/jeremy.miller/archive/2008/03/20/if-you-need-something-in-structuremap-but-you-can-t -build-it-with-new.aspx
edit:
Благодаря ответу Брэда я думаю , что у меня лучше работает HttpContext. Его ответ определенно работает, я просто не уверен, что мне нравится вызов HttpContext.Current внутри класса (кажется, что он скрывает зависимость, но я далек от эксперта в этом вопросе).
Приведенный выше код должен работать для инъекции HttpContext, насколько я могу судить. Мэтт Хинце добавляет, что если все, что мне нужно от HttpContext, - это User.Identity.Name, мой дизайн должен быть явным об этом (наличие интерфейса вокруг HttpContext раскрывает только то, что мне нужно). Я думаю, это хорошая идея.
Дело в том, что после обеда я как бы понял, что мой сервис действительно должен зависеть только от строки: userName. Зависимость от IUserProvider может не иметь особой добавленной стоимости. Итак, я знаю, что не хочу, чтобы он зависел от HttpContext, и я знаю, что все, что мне нужно, это строка (userName) - мне нужно посмотреть, смогу ли я выучить достаточно StructureMap foo, чтобы установить это соединение для меня. (ответ sirrocoo дает подсказку, с чего начать, но он удалил его: * ().
мой дизайн должен быть явным об этом (наличие интерфейса вокруг HttpContext раскрывает только то, что мне нужно). Я думаю, это хорошая идея.Дело в том, что после обеда я как бы понял, что мой сервис действительно должен зависеть только от строки: userName. Зависимость от IUserProvider может не иметь особой добавленной стоимости. Итак, я знаю, что не хочу, чтобы он зависел от HttpContext, и я знаю, что все, что мне нужно, это строка (userName) - мне нужно посмотреть, смогу ли я выучить достаточно StructureMap foo, чтобы установить это соединение для меня. (ответ sirrocoo дает подсказку, с чего начать, но он удалил его: * ().
мой дизайн должен быть явным об этом (наличие интерфейса вокруг HttpContext раскрывает только то, что мне нужно). Я думаю, это хорошая идея.Дело в том, что после обеда я как бы понял, что мой сервис действительно должен зависеть только от строки: userName. Зависимость от IUserProvider может не иметь особой добавленной стоимости. Итак, я знаю, что не хочу, чтобы он зависел от HttpContext, и я знаю, что все, что мне нужно, это строка (userName) - мне нужно посмотреть, смогу ли я выучить достаточно StructureMap foo, чтобы установить это соединение для меня. (ответ sirrocoo дает подсказку, с чего начать, но он удалил его: * ().
Я хочу, чтобы он зависел от HttpContext, и я знаю, что все, что мне нужно, это строка (userName) - мне нужно посмотреть, смогу ли я выучить достаточно StructureMap foo, чтобы установить это соединение для меня. (ответ sirrocoo дает подсказку, с чего начать, но он удалил его: * (). Я хочу, чтобы он зависел от HttpContext, и я знаю, что все, что мне нужно, это строка (userName) - мне нужно посмотреть, смогу ли я выучить достаточно StructureMap foo, чтобы установить это соединение для меня. (ответ sirrocoo дает подсказку, с чего начать, но он удалил его: * ().