gpt4 book ai didi

c# - .NET MVC 对模型的依赖注入(inject)?

转载 作者:可可西里 更新时间:2023-11-01 03:09:38 29 4
gpt4 key购买 nike

问题:有没有办法使用 Ninject 将依赖项注入(inject)我的 MVC 模型?

首先,我是 MVC 和 DI(以及 stackoverflow,顺便说一句)的新手,所以我想确保我在解决这个问题时走上了正确的道路。几天来我一直在谷歌上搜索答案,但找不到清晰的解释...我使用的是 C#、.NET4、MVC3、Ninject 和 VS2010。

场景如下:我有一个新的用户表单,用户可以在其中设置他们的登录名、角色和其他配置文件数据。提交后,我需要将登录信息保存到 MembershipProvider,将角色保存到 RoleProvider 等......它变得有点毛茸茸,因为我根据我的项目要求使用双供应商(Active Directory/本地数据库),因此,在确定要保存到哪个提供者、用户是否已经存在、是否允许他们 self 识别任何角色等方面有一些逻辑。

我觉得这个逻辑应该放在我模型的 .Save() 方法中。 但是,我随后需要将提供程序的实例注入(inject)到我的模型中,而 Ninject 似乎不注入(inject)模型(至少不使用 NuGet 包附带的默认设置)。因此我最初的问题。

我可以想到一些替代方案...

  1. 也许模型不适合作为此逻辑的起点,我应该将逻辑抽象为服务吗?但是只为这个保存功能提供服务对我来说似乎有点过分了。
  2. 我可以吃我的 Controller 中的膨胀...但我被告知“胖” Controller 是一种不好的做法。
  3. 我想我可以改为将我的提供程序注入(inject)我的 Controller ,然后将这些依赖项传递给我的模型,但这似乎有点靠不住。

那么... 有没有办法注入(inject)模型,或者我是否需要重构,因为我是这方面的新手?

最佳答案

我会选择选项一。这并不过分 - 添加一个类和一个接口(interface)只是几行代码,它使您的实现保持整洁,也许以后您会想要添加更多方法...更新用户?

添加一个接口(interface)和类来处理您的 Controller 使用的这个 - ninject 将为您获取这个实例。我已经编写了 IMembershipAndRoleService 作为示例。

public interface IMembershipAndRoleService
{
void ProcessNewUser(User newUser);
}

public class YourController : Controller
{
private readonly IMembershipAndRoleService _membershipAndRoleService;

public YourController(IMembershipAndRoleService membershipAndRoleService)
{
_membershipAndRoleService = membershipAndRoleService;
}

[HttpPost]
public ActionResult NewUserFormAction(NewUserForm newUserForm)
{
//process posted form, possibly map / convert it to User then call to save
_membershipAndRoleService.ProcessNewUser(user);
//redirect or return view
}
}

最后创建实现 IMembershipAndRoleService 的类,该类将使用您的成员身份和角色提供者或其他接口(interface),从而简化您在该类中的逻辑。

关于c# - .NET MVC 对模型的依赖注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6461601/

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