jri*_*zzo 16 c# ninject asp.net-mvc-3
问题:有没有办法使用Ninject将依赖项注入我的MVC模型?
首先,我是MVC和DI(以及stackoverflow,btw)的新手,所以我想确保我正在走这条问题的正确道路.几天来我一直在谷歌搜索答案,但我找不到一个干净的解释......我正在使用C#,. NET4,MVC3,Ninject和VS2010.
这是一个场景:我有一个新的用户表单,用户可以在其中设置登录,角色和设置其他配置文件数据.当这个提交时,我需要将登录信息保存到MembershipProvider,RoleProvider的角色等等......它有点毛茸茸,因为我根据我的项目要求使用双提供程序(Active Directory /本地数据库),因此,在确定要保存到哪个提供程序时,如果用户已经存在,是否允许自我识别任何角色,还有一些逻辑,等等.
我觉得这个逻辑应该放在我的模型上的.Save()方法中.但是,我需要将我的提供者的实例注入到我的模型中,而Ninject似乎没有注入模型(至少不使用NuGet包附带的默认设置).因此,我的初步问题.
我可以想到一些替代方案......
那么...... 有没有办法让Ninject模型或者我需要重新考虑因为我是新手吗?
CRi*_*ice 11
我会选择一个.它并不过分 - 添加一个类和一个接口只需几行代码,它可以保持你的实现整洁,也许以后你会想要添加更多方法...更新用户?
添加一个接口和类来处理控制器使用的--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
}
}
Run Code Online (Sandbox Code Playgroud)
最后创建实现IMembershipAndRoleService的类,此类将使用您的Membership和Role提供程序或其他接口,这样可以简化此类中的逻辑.
如果您正在使用NuGet的Ninject.MVC包,它将挂钩到MVC DependencyResolver,因此您可以执行此操作以获取Ninject注入的模型实例.
var model = System.Web.Mvc.DependencyResolver.Current.GetService<MyModel>();
Run Code Online (Sandbox Code Playgroud)
服务架构可能是设计应用程序的更好方法,但对于"我的模型为什么不注入"的简单问题,这是因为您需要通过依赖注入容器创建它,而不是通过new().
| 归档时间: |
|
| 查看次数: |
4119 次 |
| 最近记录: |