2011-11-23 12 views
6

Próbuję replikować następujące Ninject składni w jedności, ale nie mający szczęścia:Unity odpowiednik dla Ninject za Bind.ToMethod z IPrincipal, IIdentity

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

myślę to powinno wyglądać mniej więcej tak :

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

Jak to powinno być?

Odpowiedz

11

Podczas gdy odpowiedź neontapir's może działać, ta metoda rozszerzenia jest Przestarzała. Poprawny sposób to zrobić teraz byłoby użyć InjectionFactory:

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

Dziękujemy za aktualizację – neontapir

+0

Dzięki BFree. Dokładnie tego potrzebowałem. – Alfred

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

To nie będzie działać, jak to uchwycić bieżące wystąpienie User.Identity i zawsze powrócić że. OP chce, aby User.Identity było ** oceniane ** za każdym razem, gdy kontener jest proszony o rozwiązanie IIdentity. – BFree

+0

Prawda. Jeśli wymagana jest dokładna semantyka, odpowiedź jest oczywiście bliższa temu. –

+1

HttpContext.Current.User.Identity nie jest dostępny, gdy kontener jest zainicjowany, więc tak, chciał, aby był oceniany za każdym razem. – Alfred

0

Wierzę, że zrobi to static factory extension. Jestem zardzewiała na Unity. Seeman's Dependency Injection w .NET jest dobrym źródłem informacji dla takich sytuacji.

Powiązane problemy