2011-11-23 37 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中的依賴注入對於這類情況來說是一個很好的資源。