2011-11-23 8 views
6

sto cercando di replicare la seguente sintassi Ninject in Unity, ma non avendo alcuna fortuna:unità equivalente per Bind.ToMethod di Ninject di IPrincipal, IIdentity

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

sto pensando che dovrebbe essere simile :

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

Come dovrebbe essere?

risposta

11

Mentre la risposta neontapir's può funzionare, il metodo di estensione è Obsoleto. Il modo corretto per farlo ora sarebbe quello di utilizzare un InjectionFactory:

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

Grazie per l'aggiornamento – neontapir

+0

Grazie BFree. Questo è esattamente ciò di cui avevo bisogno. – Alfred

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

Questo non avrebbe funzionato come sarebbe catturare l'istanza corrente di User.Identity, e sempre tornare quello. L'OP vuole che l'User.Identity sia ** valutata ** ogni volta che viene chiesto al contenitore di risolvere una IIdentity. – BFree

+0

Vero. Se è richiesta la semantica esatta, la tua risposta è ovviamente più vicina a questo. –

+1

HttpContext.Current.User.Identity non è disponibile quando il contenitore è inizializzato, quindi sì voleva che fosse valutato ogni volta. – Alfred

0

Credo che uno static factory extension lo farebbe. Sono arrugginito su Unity. di Seeman Injection in .NET è una buona risorsa per situazioni come questa.