我试图找出一种方法,将依赖关系注入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
的实例每次都为空。
答案 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授权程序 将全局应用于所有集线器和集线器方法。