2016-10-25 5 views
3

Я новичок в stackoverflow и уже много лет является lurker и очень помог мне в качестве разработчика. Большое спасибо.Клиент SignalR с несколькими параметрами

Ending моего введения с этим очень первым постом и вопросом:

Сценарий:

Я работаю с SignalR.

У меня есть сервер SignalR, который передает сообщение всем клиентам с 6 параметрами.

Когда я реализую его в веб-клиенте (MVC), он отлично работает, и я могу получить все эти 6 параметров.

Я попытался реализовать его в Xamarin.

Вот пример прокси-фрагмент:

proxy.On<string, string, string , string, string, string>("test", (test1, test2, test3, test4, test5, test6) => 
      { 
       MyActivity.RunOnUiThread(() => 
       { 
        //my method here 
       }); 
      }); 

Когда у меня есть 6 параметров я получаю эту ошибку:

«IHubProxy» не содержит определения для «On» и без расширения метод «Вкл», принимающий первый аргумент типа «IHubProxy», может быть найден (вам не хватает директивы использования или ссылки на сборку?)

Но когда я изменил свои параметры на 4

proxy.On<string, string, string , string>("test", (test1, test2, test3, test4) => 
     { 
      MyActivity.RunOnUiThread(() => 
      { 
       //my method here 
      }); 
     }); 

Я бы не получил ошибку, и я смогу получить эти 4 параметра. Но в моем приложении мне нужно получить все эти 6 параметров.

Почему это, когда у меня есть более 4 параметров, я получаю эту ошибку?

Я что-то упустил?

Спасибо!

ответ

4

Это просто ограничение прокси-сервера SignalR .NET. Это швы, что разработчики были немного ленивы о переопределении метода On для поддержки большего количества параметров типа или, возможно, они просто считали, что если у вас есть больше параметров, вы должны сгруппировать их в классе. Решение действительно простое, создайте класс, включающий столько свойств, сколько вам нужно, вместо использования параметров. Что-то вроде:

public class AllParams 
{ 
    public string Prop1 { get; set; } 
    public string Prop2 { get; set; } 
    public string Prop3 { get; set; } 
    public string Prop4 { get; set; } 
    public string Prop5 { get; set; } 
    public string PropN { get; set; } 
} 

proxy.On<AllParams>("test", all => 
{ 
    MyActivity.RunOnUiThread(() => 
    { 
     // all.Prop1, all.Prop2, etc... 
    }); 
}); 

Это может даже улучшить ваш код читаемость

+0

я вижу. Так что это ограничение. В этом есть смысл. Благодаря! – Light

Смежные вопросы