[英]SignalR : How to use IHubContext<THub,T> Interface in ASP.NET MVC?
我一直在嘗試在使用Microsoft.AspNet.SignalR
庫的ASP.NET MVC項目中使用以下方法:
public interface ITypedHubClient
{
Task BroadcastMessage(string name, string message);
}
從集線器繼承:
public class ChatHub : Hub<ITypedHubClient>
{
public void Send(string name, string message)
{
Clients.All.BroadcastMessage(name, message);
}
}
將鍵入的hubcontext注入到控制器中,並使用它:
public class DemoController : Controller
{
IHubContext<ChatHub, ITypedHubClient> _chatHubContext;
public DemoController(IHubContext<ChatHub, ITypedHubClient> chatHubContext)
{
_chatHubContext = chatHubContext;
}
public IEnumerable<string> Get()
{
_chatHubContext.Clients.All.BroadcastMessage("test", "test");
return new string[] { "value1", "value2" };
}
}
但是, Microsoft.AspNet.SignalR
庫中沒有IHubContext<THub,T>
接口 ,因此我不能將IHubContext
與兩個參數( IHubContext<ChatHub, ITypedHubClient> _chatHubContext;
)一起使用。 因此,我想知道是否有可能使用DI庫或方法。 如果是這樣,如何解決此問題?
Microsoft.AspNetCore.SignalR
包含用於無類型集線器的IHubContext
public interface IHubContext<THub> where THub : Hub
{
IHubClients Clients { get; }
IGroupManager Groups { get; }
}
和用於類型的集線器
public interface IHubContext<THub, T> where THub : Hub<T> where T : class
{
IHubClients<T> Clients { get; }
IGroupManager Groups { get; }
}
從聲明中可以看到, THub
參數沒有在任何地方使用,實際上它僅用於依賴注入。
Microsoft.AspNet.SignalR
依次包含以下IHubContext
聲明
// for untyped hub
public interface IHubContext
{
IHubConnectionContext<dynamic> Clients { get; }
IGroupManager Groups { get; }
}
// for typed hub
public interface IHubContext<T>
{
IHubConnectionContext<T> Clients { get; }
IGroupManager Groups { get; }
}
如您所見,在這種情況下,接口不包含THub
參數,並且不需要它,因為ASP.NET MVC
沒有為SignalR
內置DI。 對於使用類型化的客戶端,在您的情況下使用IHubContext<T>
就足夠了。 要使用DI,您必須“手動注入”集線器上下文,如我在此處所述 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.