2017-06-06 80 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

回答