我正在使用Signalr 2,Webapi 2和Ninject for Ioc,我遇到了麻烦.
在SignalR 2.0中,您无法替换JsonSerializer.
正如在这里回答的那样:
SignalR 2.0.0 beta2 IJsonSerializer extensibility
我需要忽略json中的ReferenceLoopHandling,所以我使用了这段代码:
var serializerSettings = new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
NullValueHandling = NullValueHandling.Ignore
};
GlobalHost.DependencyResolver.Register(typeof(JsonSerializer), () => JsonSerializer.Create(serializerSettings));
一切正常,但我也从Webapi调用signalR客户端,除非我在app start中设置此代码,否则调用将无法工作:
GlobalHost.DependencyResolver = new NinjectSignalRDependencyResolver(NinjectIocConfig.Kernel);
现在可以从webapi调用signalR客户端,但不再使用JSON序列化设置.
我怎么能解决这个问题或者我做错了什么?
提前致谢
最佳答案 您是否在本期末看到了我的讨论?
https://github.com/SignalR/SignalR/issues/500#issuecomment-27480715
问题是kernel.TryGet(serviceType)不会返回null,而是一个默认实例,因为singalR现在是一个具体的类型,Ninject在实例化未注册的具体类型时不会失败.
您可以检查具体类型是否在内核中具有显式绑定,如果不使用SignalR Dep.resolver中的值
kernel.GetBindings(serviceType).Any();