【问题标题】:Access Thread.CurrentPrincipal when binding with NInject in Owin context在 Owin 上下文中与 NInject 绑定时访问 Thread.CurrentPrincipal
【发布时间】:2015-06-06 21:27:07
【问题描述】:

我需要在绑定我的服务时访问我的声明,但似乎 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);
}

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

【问题讨论】:

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


    【解决方案1】:

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

    class MyServiceDecoraptor : IMyService
    {
        private readonly IMyServiceFactory _myServiceFactory;
        public MyServiceDecoraptor(IMyServiceFactory myServiceFactory)
        {
            _myServiceFactory = myserviceFactory
        }
    
        public void MyServiceMethod()
        {
            var principal = Thread.CurrentPrincipal;
            var userid = GetUserId(principal);
            _myServiceFactory.Create(userid).MyServiceMethod();
        }
        //more code here
       }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多