Reputation: 515
I'm new to stackoverflow and has been a lurker for many years and has been a great help for me as a developer. Many thanks.
Ending my introduction with this very first post and question:
The Scenario:
I'm working with SignalR.
I have a SignalR server that broadcast a message to all the clients with 6 parameters.
When I implement it in a Web Client (MVC) it works fine and I can get all those 6 parameters.
I tried implementing it in Xamarin.
Here is the sample proxy snippet:
proxy.On<string, string, string , string, string, string>("test", (test1, test2, test3, test4, test5, test6) =>
{
MyActivity.RunOnUiThread(() =>
{
//my method here
});
});
When I have 6 parameters I'll get this error:
'IHubProxy' does not contain a definition for 'On' and no extension method 'On' accepting a first argument of type 'IHubProxy' could be found (are you missing a using directive or an assembly reference?)
But when I changed my parameters to 4
proxy.On<string, string, string , string>("test", (test1, test2, test3, test4) =>
{
MyActivity.RunOnUiThread(() =>
{
//my method here
});
});
I would not get an error and I will be able to get those 4 params. But In my application I need to get all those 6 params.
Why is it that whenever I have more than 4 params I get this error?
Am I missing something?
Thanks!
Upvotes: 6
Views: 7711
Reputation: 6375
That's just a limitation on the SignalR .NET client proxy. It seems that the devs were a bit lazy about overriding the On
method to support more Type parameters or maybe they just considered that if you've got more params you should group them in a class.
The solution is really simple. Create a class including as many properties as you need instead of using parameters. Something like:
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...
});
});
This can even improve your code readability.
Upvotes: 6