2011-11-23 8 views
6

私はユニティで、次のNinjectの構文を複製しようとしているが、任意の運を持っていないよ:IPrincipalのNinjectのBind.ToMethodのためのUnityシステムと同等、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の依存性注入は、このような状況に適したリソースです。

関連する問題