在另一个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>());
}
}
答案 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
。