【问题标题】:Ninject Bind IIdentityMessageService twiceNinject Bind IIdentityMessageService 两次
【发布时间】:2016-01-13 10:29:25
【问题描述】:

希望你一切顺利。

我正在尝试将 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?

【问题讨论】:

    标签: c# ninject asp.net-identity-2 ninject.web.mvc


    【解决方案1】:

    解决方法是使用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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      • 2023-04-05
      • 2011-05-20
      • 1970-01-01
      • 1970-01-01
      • 2013-10-21
      • 1970-01-01
      相关资源
      最近更新 更多