So konfigurieren Sie Autofac und SignalR in einer MVC 5-Anwendung

Ich versuche, eine MVC 5-Anwendung für die Verwendung von SignalR 2.2.x zu konfigurieren und einen Dienst in mein @ einzufügeNotificationsHub. Wir verwenden Autofac für MVC, aber ich bin nicht sicher, wie ich das richtig konfigurieren soll. Es gibt eine Autofac-Dokumentation für NuGetAutofac.Integration.SignalR (3.0.2) undAutofac.Integration.Mvc (3.3.4).

Was ich bisher mache, ist das Registrieren der Hubs über:

ContainerBuilder builder = new ContainerBuilder();

// Register MVC controllers.
builder.RegisterControllers(typeof(MvcApplication).Assembly);

builder.RegisterType<ServiceForSignalRHub>().AsImplementedInterfaces();
builder.RegisterType<...>().AsImplementedInterfaces();

builder.RegisterHubs(Assembly.GetExecutingAssembly());

IContainer container = builder.Build();

DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

Wie auch immer der Anruf an.SetResolver(...) ist ambitioniert, da es sowohl in MVC- als auch in SignalR-Integrationspaketen vorhanden ist. Was jetzt? Ich kann nicht bestätigen, ob die Konstruktor-Injection meines Service für den von mir verwendeten Hub funktioniert.

BEARBEITE

Ich kann MVC5 problemlos mit Autofac konfigurieren. Wo ich mich verliere, ist, wie ich mit SignalR dasselbe mit der Autofac-Signal-Integration NuGet machen kann. Siehe unten

Dies ist meine Startklasse:

public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {
        var defaultFactory = LogManager.Use<DefaultFactory>();
        defaultFactory.Directory("@D:\\NServiceBus\\ );
        defaultFactory.Level(LogLevel.Debug);

        var container = ConfigureAutofac(app);

        ConfigureServiceBus(container, app);

        app.UseAutofacMiddleware(container); // REGISTER WITH OWIN
        app.UseAutofacMvc();

        ConfigureAuth(app);

        GlobalConfiguration.Configuration.UseSqlServerStorage("hangfire");

        ConfigureSignalR(app);
    }
}

Dies ist der Teil, in dem ich SignalR konfiguriere:

public partial class Startup
{
    public void ConfigureSignalR(IAppBuilder app)
    {
        var builder = new ContainerBuilder();

        builder.RegisterHubs(Assembly.GetExecutingAssembly()).PropertiesAutowired();
        builder.RegisterType<MaintenanceService>().As<IMaintenanceService>().PropertiesAutowired();

        var container = builder.Build();
        //var container = new AutofacContainer().Container;

        var resolver = new AutofacDependencyResolver(container);

        // Any connection or hub wire up and configuration should go here
        app.MapSignalR(new HubConfiguration
        {
            Resolver = resolver,
            EnableJSONP = true,
            EnableDetailedErrors = true,
            EnableJavaScriptProxies = true
        });

        builder.RegisterInstance(resolver.Resolve<IConnectionManager>());
    }
}

Wie kann das richtig gemacht werden?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage