我有一个带有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]属性注入服务。