代码之家  ›  专栏  ›  技术社区  ›  UpTheCreek

通过依赖项注入传递ASP.NET用户

  •  4
  • UpTheCreek  · 技术社区  · 14 年前

    在我的Web应用程序中,我有各种组件需要访问当前经过身份验证的用户(httpcontext.user)。

    组件可以通过两种明显的方式访问: 1)从httpcontext.current获取用户 2)在施工人员中传递用户

    1. 这并不理想,因为当应用程序组件真的不应该了解它时,它会使测试变得困难,并将它们与Web问题联系起来。
    2. 只是混乱和复杂的一切。

    所以我一直在考虑使用ioc容器(通过依赖注入)将当前用户(或者可能只是名称/id)传递给任何需要它的组件。

    是否有人使用此技术为应用程序的某些部分提供当前的ASP.NET用户?或者,这听起来像是一个明智的方法吗?我想知道这对人们来说是怎么回事。

    谢谢

    更新: 感谢Raj的一个很好的例子。如果有人有类似的例子使用自动空调,这将是非常感谢!

    最新消息2:谢谢你的回答,希望我能分开接受!

    2 回复  |  直到 14 年前
        1
  •  6
  •   Carl Hörberg    14 年前

    在AutoFac中:

    builder.register(c=>httpContext.current.user.identity).httpRequestScoped();

        2
  •  2
  •   Raj Kaimal    14 年前

    使用同样包含iIdentity的iprincipal怎么样?

    http://msdn.microsoft.com/en-us/library/f8kt7fb8%28v=VS.100%29.aspx

    http://msdn.microsoft.com/en-us/library/f8kt7fb8%28v=vs.100%29.aspx

    --更新——

    private static void AddSecurityConcernsTo(IWindsorContainer container)
    {
        container.Register(Component.For<IIdentity>()
          .LifeStyle.PerWebRequest
          .UsingFactoryMethod(() => HttpContext.Current.User.Identity));
    
        container.Register(Component.For<IPrincipal>()
          .LifeStyle.PerWebRequest
          .UsingFactoryMethod(() => HttpContext.Current.User));
    
        container.Register(Component.For<HttpSessionStateBase>()
            .LifeStyle.PerWebRequest
            .UsingFactoryMethod(() => new HttpSessionStateWrapper(HttpContext.Current.Session)));
    
    }
    

    裁判: http://blog.coreycoogan.com/tag/controller-ioc/