Инъекционные услуги, которые дорого создавать - PullRequest
4 голосов
/ 23 августа 2011

У меня есть приложение, которое отправляет уведомления по электронной почте и факсу, когда элемент завершен.Моя реализация работает, но она занимает несколько секунд (т.е. подключение к нашим серверам).В результате пользовательский интерфейс останавливается на несколько секунд, пока службы уведомлений не будут полностью созданы и использованы.Я уже настаиваю на том, что проблема заключается в том, чтобы внедрить фабрики и создать мои службы в последний момент.

Какие варианты у меня есть для внедрения внешних служб, создание которых занимает несколько секунд?Я подумываю проинструктировать мой контейнер, что эти сервисы являются одиночными, которые будут создавать сервисы только один раз за запуск приложения.

Ответы [ 2 ]

4 голосов
/ 23 августа 2011

Простое решение

Я бы дал этим сервисам более длительный срок службы (единичный экземпляр).

Проблема в том, что TCP-соединения обычно отключаются, если какое-то время ничего не происходило.Это означает, что вам нужно иметь какие-то пакеты поддержки активности, чтобы держать их открытыми.

Более надежное решение

imho, настройка соединения не является проблемойОбращение в службу не должно занять много времени.Вы не указали, что такое внешние сервисы.Я предполагаю, что это какие-то веб-сервисы, размещенные в IIS.Если это так, убедитесь, что пулы приложений не перерабатываются слишком часто.Запуск нового приложения в IIS может занять некоторое время.

Другая мысль: действительно ли вам нужно ждать завершения службы?Почему бы не поставить в очередь действие (для обработки пулом потоков или в отдельном потоке) и позволить пользователю продолжить?Если требуется, просто используйте окно сообщения, когда служба была вызвана и что-то не удалось.

2 голосов
/ 23 августа 2011

Эти службы должны быть загружены при запуске приложения, а затем настроены через DI с использованием синглтона, который затем внедряется в любые классы, которые используют этот класс в своем конструкторе.

Я могу порекомендовать Unity или Spring.Net.Я обнаружил, что Unity очень прост в использовании для простых инъекций, так что взгляните.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...