Ninject 绑定 IIdentityMessageService 两次
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();
Error activating IIdentityMessageService More than one matching
bindings are available.
......
Suggestions: 1) Ensure that you have defined a binding for
IIdentityMessageService only once.
现在如前所述,我将 usermanager 移到了一个单独的库中,我的 UserManger 的构造函数是
public UserManager(Context context, IIdentityMessageService emailService,
IIdentityMessageService smsService, IUserTokenProvider<User, string> tokenProvider = null)
: base(new UserStore(context))
所以我的问题是,如何实现两次注入 IIdentityMessageService 或如何使用 ninject 构造 UserManager?
解决方法是使用named bindings:
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))
希望你一切都好。
我试图将 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();
Error activating IIdentityMessageService More than one matching bindings are available.
......
Suggestions: 1) Ensure that you have defined a binding for IIdentityMessageService only once.
现在如前所述,我将 usermanager 移到了一个单独的库中,我的 UserManger 的构造函数是
public UserManager(Context context, IIdentityMessageService emailService,
IIdentityMessageService smsService, IUserTokenProvider<User, string> tokenProvider = null)
: base(new UserStore(context))
所以我的问题是,如何实现两次注入 IIdentityMessageService 或如何使用 ninject 构造 UserManager?
解决方法是使用named bindings:
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))