У меня есть класс Listener
для прослушивания определенного HTTP-порта. Я сделал Listener
singleton (так как всегда будет один объект прослушивателя, прослушивающий определенный порт). Для этого я сделал по умолчанию Listener()
contructor private
. Made Listener
пример (внутри Listener
класс) static
и есть static Listener
конструктор initialize singleton Listener
объект. Также есть static Listener getListener()
, который возвращает экземпляр singleton Listener
.Передача параметров одиночному классу/статическому конструктору
Я получаю SOAP на этом порту, который обрабатывает метод обратного вызова моего слушателя.
Теперь я хочу, чтобы дата последнего уведомления была нажата на мой интерфейс.
Так что я думал, что как-то во время инициализации Listener
я передать делегат, ссылка на который будет храниться внутри Listener
, а затем каждый раз, когда я получаю уведомление, внутри слушателя обратного вызова я буду называть этот делегат и передать его текущее время (new DateTime()
), который будет выполнять необходимую задачу печати сообщения со временем. Я также подумал о том, чтобы сделать параметр делегата необязательным, чтобы, если делегат null
, он вообще не будет вызываться при уведомлении. Однако, поскольку я сделал конструктор закрытым, я не могу понять, как я могу передать ему делегат.
Чтобы обобщить и обобщать весь вопрос: Как передать параметр (который будет храниться как член экземпляра) в singleton class?
Должен ли я передать делегат getListener()
? и внутри он проверяет каждый раз, если делегат имеет значение null, а если нет, задайте его? Но если я получаю доступ к этому объекту singleton слишком много раз, вызывая Listener.getListener()
, каждый раз он будет излишне проверять делегат null
. На самом деле именно поэтому я перевел инициализацию Listener
на статический конструктор, чтобы избежать проверки, инициализируется ли Listener
каждый раз, когда вызывается getListener()
.
Что нужно сделать, чтобы передать параметр в класс singleton? Или это проверяется в getListener()
неизбежным?
Примечание: я не знаю, но этот вопрос может сводиться к тому, как мы можем передать параметры статического конструктора, так как мы должны инициализировать вещи в первый раз используется класс, и мы должны инициализировать его с делегатом/другим (поэтому мы не можем загружать параметры инициализации из некоторого файла конфигурации внутри статического конструктора).
Почему бы не поднять событие из класса singleton, которое уведомляет пользовательский интерфейс о последнем времени запроса? или иметь свойство, которое всегда задано этому значению, которое может быть запрошено в потоке пользовательского интерфейса. – Kami
событие повышения означает повторный вызов обратного вызова, который будет только делегировать - я полагаю, и установка значения означает, что поток пользовательского интерфейса для выполнения опроса - может не отражать обновления немедленно? – Mahesha999
События являются делегатами по существу; поэтому он не будет более облагаться налогом, а затем вызовет делегата, переданного методу. Кроме того, поскольку делегат связан с объектом, было бы проще добавить несколько событий в событие. Рассмотрим шаблон наблюдателя - http://msdn.microsoft.com/en-us/library/ee817669.aspx – Kami