SignalR Autofac注入授权属性

时间:2015-12-09 22:27:06

标签: .net dependency-injection attributes signalr autofac

我试图找出一种方法,将依赖关系注入SignalR中的AuthorizeAttribute,类似于在WebAPI中的方式。

在Web API中我知道我可以调用builder.RegisterWebApiFilterProvider(config);,但我似乎无法找到SignalR的等价物。我能找到的最接近的东西就是PropertiesAutowired()方法。

我已尝试builder.RegisterType<MyAuthorizationAttribute>.PropertiesAutowired();我的属性看起来像

public class MyAuthorizationAttribute : AuthorizeAttribute
{
    public IRepository Repository { get; set; }

    public override bool AuthorizeHubConnection(HubDescriptor hubDescriptor, 
        IRequest request)
    {
        Repository.QueryStoredProcedure("Test");
        ...
    }

    protected override bool UserAuthorized(IPrincipal user)
    {
        ...
    }
}

Repository的实例每次都为空。

1 个答案:

答案 0 :(得分:2)

根据http://eworldproblems.mbaynton.com/2012/12/signalr-hub-authorization/

在Autofac中注册MyAuthorizationAttribute:

builder.RegisterType<MyAuthorizationAttribute>().PropertiesAutowired();

然后在app.MapSignalR():

之前
 var myModule = container.Resolve<MyAuthorizationAttribute >(); 
 GlobalHost.HubPipeline.AddModule(new AuthorizeModule(myModule, myModule));

使用这段代码,您可以为集线器连接和方法调用设置全局授权模块。

  

可选地,可以使用该模块进行实例化   IAuthorizeHubConnection和IAuthorizeHubMethodInvocation授权程序   将全局应用于所有集线器和集线器方法。

在此处阅读更多https://msdn.microsoft.com/en-us/library/microsoft.aspnet.signalr.hubs.authorizemodule(v=vs.118).aspx