2015-08-24 52 views
2

我有一個web api應用程序,包含一些SignalR功能,它具有由Autofac管理的依賴關係。SignalR,WebApi,Autofac,camelCasedJson

SignalR,開箱即用,不支持camelCased Json屬性。

有一個體面的修復here,但我需要將它與Autofac集成。

所以.....

這裏的SignalR樞紐

public class PledgeHub : Hub 
{ 
    public void SendPledge(LivePledgeUpdate pledge) 
    { 
     Clients.All.sendPledge(pledge); 
    } 
} 

這裏的startup.cs類從文章

​​

inluding的駝峯格式解析器我剛剛得到駝峯特性所有通過WebApi提供的服務都可以,但不能通過Signalr。

回答

1

我猜,你的問題是這樣的:

GlobalHost.DependencyResolver.Register(typeof(JsonSerializer),() => JsonSerializerFactory.Value); 

如果您使用Autofac作爲容器/依賴解析器,你要註冊與Autofac序列化,不能與即將TO-被替換的全局依賴解析器。

builder.Register(ctx => JsonSerializerFactory.Value).As<JsonSerializer>(); 

此外,我看到你正在使用OWIN。當您使用OWIN時,您不會引用GlobalHost - 您分別設置了集線器配置。 The docs have an example showing how to do it

public class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
    var builder = new ContainerBuilder(); 

    // STANDARD SIGNALR SETUP: 

    // Get your HubConfiguration. In OWIN, you'll create one 
    // rather than using GlobalHost. 
    var config = new HubConfiguration(); 

    // Register your SignalR hubs. 
    builder.RegisterHubs(Assembly.GetExecutingAssembly()); 

    // Set the dependency resolver to be Autofac. 
    var container = builder.Build(); 
    config.Resolver = new AutofacDependencyResolver(container); 

    // OWIN SIGNALR SETUP: 

    // Register the Autofac middleware FIRST, then the standard SignalR middleware. 
    app.UseAutofacMiddleware(container); 
    app.MapSignalR("/signalr", config); 
    } 
} 
+0

謝謝,可能需要幾天時間我才能檢查結果並標記爲正確。我知道這將與全局主機有關,只是不確定註冊該串行器的語法。 – MrBliz

+0

這對我不起作用。它註冊一切正常,但串行器似乎搞亂了通信。一旦我有了序列化程序,來自主機的消息就不會再向客戶端發送消息了。 @MrBliz你能分享一下你是否有這個固定的? – Jasper

+0

我沒有。我結束了客戶端上的pascal套件 – MrBliz