2011-11-23 35 views
6

我试图复制在Unity以下Ninject语法,但没有任何运气:团结等值Ninject的Bind.ToMethod的IPrincipal的,IIdentity的

Bind<IIdentity>().ToMethod(c => HttpContext.Current.User.Identity); 

我想它应该是这个样子:

IUnityContainer container; 
... 
container.RegisterType<IIdentity>(HttpContext.Current.User.Identity); 

应该是怎么回事?

回答

11

虽然neontapir's答案可以工作,该扩展方法已过时。现在这样做的正确的方法是使用一个InjectionFactory

container.RegisterType<IIdentity>(new InjectionFactory(u => HttpContext.Current.User.Identity)); 
+0

谢谢你的更新 – neontapir

+0

谢谢BFree。这正是我需要的。 – Alfred

1
container.RegisterInstance<IIdentity>(...); 
+1

这是行不通的,因为它会捕捉User.Identity的当前实例,并始终返回。 OP要求每当容器被要求解析一个IIdentity时,User.Identity被**评估**。 – BFree

+0

是的。如果需要确切的语义,那么你的答案显然更接近于此。 –

+1

容器初始化时HttpContext.Current.User.Identity不可用,所以是希望每次都评估它。 – Alfred

0

我相信static factory extension会这样做。我在Unity上很生疏。 Seeman的.NET中的依赖注入对于这类情况来说是一个很好的资源。