在Owin上下文中与NInject绑定时访问Thread.CurrentPrincipal

时间:2015-04-02 02:48:47

标签: asp.net-web-api ninject owin

我需要在绑定我的服务时访问我的声明,但看起来Ninject绑定发生在HttpMessageHandlerAdapter设置Thread.CurrentPrincipal之前,所以当我绑定我的服务时我无法访问我的声明。我试过这个

kernel.Bind<IMyService>().ToMethod(x => GetMyService());

private static IMyService GetMyService()
{
    var principal = Thread.CurrentPrincipal;
    var userId = [GetUserIdFromPrincipalClaims]
    return new MyService(userId);
}

但是声明列表是空的,如果我从任何可以获得userId的操作中访问Thread.CurrentPrincipal声明列表。如何在绑定时访问我的声明列表?

1 个答案:

答案 0 :(得分:0)

由于身份声明是一个运行时值,我会说它不能(很容易)完成。但是,涉及装饰器模式和抽象工厂的一种方法可能如下所示:

page("/polymer/item", function() {
    app.route = "itemform";
});

page("/polymer/item/:itemId", function(data) {
    app.route = "itemform";
    app.params = data.params;
});