2017-06-06 124 views
1

注:依賴注入在ASP.NET核心

爲了簡便起見,我減少了我的代碼,並使其簡單。

代碼/設置:

我有一個類:

class MyService 
{ 
    public Guid InstanceID = Guid.NewGuid; 

我在服務中添加MyService爲作用域:

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddScoped<MyService, MyService>(); 

然後在我看來,我注入服務:

@inject MyService _myService 

@_myService.InstanceID //display 

上面的代碼顯示每個請求的不同結果,正如預期的範圍服務一樣。

但是,在SignalR Hub中注入服務時,我總是得到相同的輸出。

MyHub(MyService myService) 
{ 
    _myService = myService; 
} 

public void Test() 
{ 
    Clients.Caller.Log(_myService.InstanceID); //Log is a custom function in JS 

雖然集線器本身被實例每次調用Test(),被注入的MyService實例它始終是相同的。

我的要求:

我想要的MyService一個新的實例在中心被注入控制器/查看每個請求的方式相同。

問:

這是SignalR的默認行爲?或者我做錯了什麼?

使用的包:

<PackageReference Include="Microsoft.AspNetCore" Version="1.1.1" /> 

<PackageReference Include="Microsoft.AspNetCore.WebSockets" Version="0.2.0-*" /> 
<PackageReference Include="Microsoft.AspNetCore.SignalR.Server" Version="0.2.0-rtm-22752" /> 
+1

Microsoft.AspNetCore.SignalR.Server已棄用,因此不會出廠。 – Pawel

回答