gpt4 book ai didi

c# - 如何根据传递给 ASP.NET MVC 中的 Controller /操作的属性值有条件地绑定(bind)到 ninject?

转载 作者:太空宇宙 更新时间:2023-11-03 21:25:30 25 4
gpt4 key购买 nike

我有一个有两个实现的接口(interface)。

Bind<IWebLoginService>().To<WebUserLoginService>();
Bind<IWebLoginService>().To<WebAdminLoginService>();

我有一个用户和管理员的通用登录名。对于我的系统,如果有人使用 @mycompanyname.com 登录,他是管理员,在这种情况下,我想使用 WebAdminLoginService 服务,如果不是,则使用 WebUserLoginService

编辑: 此电子邮件存在于发布到 Controller LoginAccountInfoModel

的数据中

这是我的登录操作

[HttpPost]
[AllowAnonymous]
public ActionResult Login(LoginAccountInfoModel accountInfoModel, string returnUrl)
{...}

之前我有两个单独的 View 和操作用于管理员和客户登录,我在那里使用Named Binding 实现。

请多多指教。

最佳答案

这是我设法做到的另一种方式

第 1 步。创建一个可以返回正确服务的工厂

public interface ILoginServiceFactory
{
IUserLoginService GetLoginService(string username);
}

public class UserLoginServiceFactory : ILoginServiceFactory
{
private readonly IUserLoginService _userLoginService;
private readonly IUserLoginService _adminLoginService;
public UserLoginServiceFactory([Named("UserLogin")]IUserLoginService userLoginService, [Named("AdminLogin")]IUserLoginService adminLoginService)
{
_userLoginService = userLoginService;
_adminLoginService = adminLoginService;
}

public IUserLoginService GetLoginService(string username)
{
if (username.Contains("@somecompanyname.com"))
{
return _adminLoginService;
}
return _userLoginService;
}
}

**第 2 步:命名 ninject 绑定(bind)

Bind<IUserLoginService>().To<WebUserLoginService>().Named("UserLogin");
Bind<IUserLoginService>().To<WebAdminLoginService>().Named("AdminLogin");

第 3 步:成员资格提供商的绑定(bind)基于其注入(inject)的服务

Bind<MembershipProvider>().ToMethod(ctx => Membership.Provider);
Bind<MembershipProvider>().ToMethod(ctx => Membership.Providers["AdminSqlMembershipProvider"])
.WhenInjectedInto<WebAdminLoginService>();

第 4 步:询问工厂使用哪种服务

var webLoginService = _loginServiceFactory.GetLoginService(accountInfoModel.Email);
var signInInfo = webLoginService.SignIn(...)

关于c# - 如何根据传递给 ASP.NET MVC 中的 Controller /操作的属性值有条件地绑定(bind)到 ninject?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27286737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com