У нас есть службы WCF разоблачение несколько операций с BasicHttpBinding и реализацией услуг некоторыми вещи, как этотКак избежать ненужных объектов получения инициализируются WCF
Public Class MyService
{
private IHandler1 _handler1 = GetHandler1();
private IHandler2 _handler1 = GetHandler12();
private IHandler3 _handler1 = GetHandler3();
Public Void HandleMessage(string msg)
{
_handler1.SomeMethod();
}
Public Void HandleMessage(string msg)
{
_handler1.SomeMethod();
}
Public Void HandleMessage2(string msg)
{
_handler2.SomeMethod();
}
Public Void HandleMessage2(string msg)
{
_handler3.SomeMethod();
}
}
Но этот вопрос я вижу с этим кодом, что все обработчики инициализируются, т.е. handler1/2/3 , даже когда мы получаем запрос на обработку одного из сообщений, которые я имею в виду, когда клиент вызывает метод HandleMmessage2(), только обработчик _handler2 должен быть инициализирован. Каков наилучший способ добиться этого?
Поскольку служба разоблачает конечную точку с помощью BasicHttpbinding, которая не поддерживает сеансы, InstanceContextMode будет PerCall, который создает все обработчики, даже если это не требуется для запроса evert от клиента.
Почему бы не создать обработчик в методе, который его требует? т. е. 'public void HandleMesage (строка msg) {_handler1 = GetHandler1(); _handler1.SomeMethod(); } ' – Tim
Спасибо @Tim, но есть ли другой способ делать Lazy loading – CSharped
Вероятно, есть, но это кажется мне самым простым способом. Есть ли требование, которое мешает вам делать это таким образом? – Tim