Question

I am using Signalr 2, Webapi 2 and Ninject for Ioc and I am in trouble.

In SignalR 2.0 you can't replace the JsonSerializer. As been answered in here: SignalR 2.0.0 beta2 IJsonSerializer extensibility

I need to ignore ReferenceLoopHandling in json, so I used this code:

var serializerSettings = new JsonSerializerSettings
        {
            ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
            NullValueHandling = NullValueHandling.Ignore
        };
        GlobalHost.DependencyResolver.Register(typeof(JsonSerializer), () => JsonSerializer.Create(serializerSettings));

It all works fine, but I also call signalR clients from Webapi and calling will not work unless I set this code in app start:

GlobalHost.DependencyResolver = new NinjectSignalRDependencyResolver(NinjectIocConfig.Kernel);

Calling signalR clients from webapi now works but the JSON serialization settings are not used anymore.

How I can get around this or what am I doing wrong?

Thanks in advance

Was it helpful?

Solution

Have you seen my discussion at the end of this issue?

https://github.com/SignalR/SignalR/issues/500#issuecomment-27480715

The problem is that kernel.TryGet(serviceType) will not return null but a default instance since singalR is now usign a concrete type and Ninject will not fail on instancing a unregistered concrete type.

You can check if the concrete type has an explicit binding in the Kernel, if not use the value in the SignalR Dep.resolver

kernel.GetBindings(serviceType).Any();
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top