2017-09-25 61 views
0

我想注入一些東西到我的集線器中。在signalr-core集線器中的參數構造函數

基本上我試圖相當於本教程https://docs.microsoft.com/en-us/aspnet/signalr/overview/advanced/dependency-injection,但對於SignalR-Core。 我在部分最感興趣

public void Configuration(IAppBuilder app) 
{ 
    GlobalHost.DependencyResolver.Register(
     typeof(ChatHub), 
     () => new ChatHub(new ChatMessageRepository())); 

    App.MapSignalR(); 

    // ... 
} 

如何做到這一點的核心網和SignalR核?

+0

你已經嘗試的東西嗎? – Nikolaus

回答

1

與DI容器註冊您的ChatMessageRepository

services.AddTransient(typeof(ChatMessageRepository), typeof(ChatMessageRepository)); 

,然後注入在構造函數集線器:

public ChatHub : Hub 
{ 
    private readonly ChatMessageRepository _repository; 
    public ChatHub(ChatMessageRepository repository) 
    { 
     _repository = repository; 
    } 
    ... 
} 
+0

你確實意識到這樣做會完全破壞信號發送器,因爲它依賴於它的集線器的無參數構造器?我認爲可能會有一些設置像舊的GlobalHost,您可以在啓動類中修改以解決此問題。 –

+0

你試過嗎?你看過一些樣本,例如:https://github.com/aspnet/SignalR/blob/dev/samples/ChatSample/Hubs/Chat.cs#L12。 SignalR內核使用可以注入參數的內置激活。 https://github.com/aspnet/SignalR/blob/5dceaa81499c43afcad06349ad3fdda0feb92d84/src/Microsoft.AspNetCore.SignalR.Core/DefaultHubActivator.cs從DI – Pawel

+0

@Pawel是正確的。新的SignalR具有DI感知功能,可以完成上述工作。一個更簡單的版本是'services.AddTransient ();' – davidfowl