[英]Ninject Bind IIdentityMessageService twice
希望您一切順利。
我試圖將asp.net身份UserManger實現與項目模板隨附的默認實現區分開。 對於DI,我正在使用Ninject(我是Ninject的新手)
現在我有這樣的東西...
kernel.Bind<UserManager<User>>().To<UserManager>().InRequestScope();
kernel.Bind<IUserTokenProvider<User, string>>().ToMethod(x =>
{
var provider = OwinConfig.DataProtectionProvider;
return new DataProtectorTokenProvider<User>(provider.Create("ASP.NET Identity"));
}).InRequestScope();
kernel.Bind<SignInManager>()
.ToSelf()
.InRequestScope();
我正在嘗試注冊實現IIdentityMessageService的SmsService和EmailService
我正在做這樣的事情----並且它不適用於ninject
kernel.Bind<IIdentityMessageService>().To(typeof (SmsService)).InRequestScope();
kernel.Bind<IIdentityMessageService>().To(typeof (EmailService)).InRequestScope();
激活IIdentityMessageService時出錯,有多個匹配的綁定可用。
......
建議:1)確保僅為一次IIdentityMessageService定義綁定。
現在,正如之前所說,我將usermanager移到單獨的庫中,而UserManger的構造函數是
public UserManager(Context context, IIdentityMessageService emailService,
IIdentityMessageService smsService, IUserTokenProvider<User, string> tokenProvider = null)
: base(new UserStore(context))
所以我的問題是,如何實現兩次注入IIdentityMessageService或如何使用ninject構造UserManager?
解決方案是使用命名綁定 :
kernel.Bind<IIdentityMessageService>().To(typeof (SmsService)).Named("Sms");
kernel.Bind<IIdentityMessageService>().To(typeof (EmailService)).Named("Email");
然后通過屬性解析它:
public UserManager(Context context,
[Named("Email")] IIdentityMessageService emailService,
[Named("Sms")] IIdentityMessageService smsService,
IUserTokenProvider<User, string> tokenProvider = null)
: base(new UserStore(context))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.