SignalR自定义授权属性中的Ninject依赖注入

时间:2015-01-18 11:38:02

标签: asp.net-mvc signalr ninject authorize

我有一个带有SignalR和Ninject的ASP.NET MVC5应用程序,用于依赖注入。 我有web请求和signalr hub请求的自定义authorize属性。

我为网络制作了以下课程:

public class MyWebAuthorizeAttribute : AuthorizeAttribute // (System.Web.Mvc.AuthorizeAttribute)
{
    [Inject]
    public IMyService MyService { get; set; } 

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var id = int.Parse((httpContext.Handler as MvcHandler).RequestContext.RouteData.Values["id"].ToString());
        if (!MyService.Exists(id)) 
            return false;
        return base.AuthorizeCore(httpContext);
    }
}

以下是SignalR:

public class MySignalRAuthorizeAttribute : AuthorizeAttribute // (Microsoft.AspNet.SignalR.AuthorizeAttribute)
{
    [Inject]
    public IMyService MyService { get; set; } 

    public override bool AuthorizeHubConnection(HubDescriptor hubDescriptor, IRequest request)
    {
        var id = int.Parse(request.QueryString["id"]);
        if (!MyService.Exists(id))
            return false;
        return base.AuthorizeHubConnection(hubDescriptor, request);
    }
}

Startup类中的Ninject绑定:

var kernel = new StandardKernel();
var resolver = new NinjectSignalRDependencyResolver(kernel);
kernel.Bind<IMyService>().To<MyService>().InSingletonScope();
var config = new HubConfiguration();
config.Resolver = resolver;
app.MapSignalR(config);

问题是该服务没有被注入MySignalRAuthorizeAttribute,但是在MyWebAuthorizeAttribute中正确地注入了服务。

知道我缺少什么让这个工作吗?

修改 找到一种方法让它或多或少地起作用。

在启动类中,我不得不添加:

GlobalHost.DependencyResolver = resolver;

然后在MySignalRAuthorizeAttribute中,我可以得到这样的服务:

MyService = GlobalHost.DependencyResolver.Resolve<IMyService>();

这样可行,但我仍然希望简单地使用[Inject]属性注入服务。

0 个答案:

没有答案