2017-09-25 6 views
0

Je voudrais injecter quelque chose dans mon hub.constructeur avec des paramètres dans un concentrateur de signal-noyau

Fondamentalement, je suis en train d'essayer l'équivalent de ce tutoriel https://docs.microsoft.com/en-us/aspnet/signalr/overview/advanced/dependency-injection, mais pour SignalR-Core. Je suis principalement intéressé par la partie

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

    App.MapSignalR(); 

    // ... 
} 

Comment puis-je faire et SignalR net de base-Core?

+0

avez-vous essayé déjà quelque chose? – Nikolaus

Répondre

1

Enregistrez votre ChatMessageRepository dans le conteneur DI avec:

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

puis injecter dans votre hub dans le cteur:

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

vous réalisez que le faire de cette façon casse complètement signalr car il dépend de constructeurs sans paramètre pour ses hubs? Je pense qu'il pourrait y avoir un réglage comme l'ancien GlobalHost que vous pouvez modifier dans la classe Startup qui résout cela. –

+0

Avez-vous essayé? Avez-vous regardé quelques exemples, par exemple: https://github.com/aspnet/SignalR/blob/dev/samples/ChatSample/Hubs/Chat.cs#L12. Le cœur de SignalR utilise l'activation intégrée qui peut injecter des paramètres. https://github.com/aspnet/SignalR/blob/5dceaa81499c43afcad06349ad3fdda0feb92d84/src/Microsoft.AspNetCore.SignalR.Core/DefaultHubActivator.cs de DI – Pawel

+0

@Pawel est correct. Le nouveau SignalR est conscient de DI et fait les travaux ci-dessus. Une version plus simple est 'services.AddTransient ();' – davidfowl