MVC5中的IPrincipal依赖注入

时间:2014-03-31 20:35:44

标签: c# authentication dependency-injection asp.net-mvc-5

在另一个stackoverflow问题MVC5 IoC and Authentication中,第一个答案表明作者使用依赖注入来注入IPrincipal。我很乐意为我的装配工做这件事,这样我就不必从控制器传递当前用户(IPrincipal)了。

有人能举例说明如何使用DI在C#MVC5中注入IPrincipal吗?下面是我首先要实现的IoC。在给出第一个答案后添加。

    public class ViewModelAssemblersInstaller : IWindsorInstaller
    {
        public void Install(IWindsorContainer container, IConfigurationStore store)
        {
            container.Register(
                Component.For<IAspNetUserAssembler>()
                .ImplementedBy<AspNetUserAssembler>());
        }
    }

2 个答案:

答案 0 :(得分:6)

对于Castle Windsor来说,它就像是:

container.Register(Component.For<IPrincipal>()
  .LifeStyle.PerWebRequest
  .UsingFactoryMethod(() => HttpContext.Current.User));

答案 1 :(得分:4)

它依赖于你的IoC容器......对我来说,我使用Unity,在我的容器注册中,我能够做到以下几点:

container.RegisterType<IPrincipal>(new InjectionFactory(u => HttpContext.Current.User));

使用InjectionFactory,unity将执行lambda以在构造函数注入时返回当前HttpContext.Current.User。我也可以在非Web应用程序中使用相同类型的注册,而不是引用Thread.CurrentPrincipal