我正在使用实现ASP.NET Membership Provder的MVC AccountController。 我有一个包含所有数据库访问权限的存储库,我在其中添加了一个返回国家/地区列表的Countries属性。我想在Register页面添加一个country下拉列表,这样我就可以从我的存储库中获取这些数据并将其传递给View。 我一直在我的其他控制器中使用构造函数注入,但我不知道如何将其应用于现有的AccountController。
// This constructor is used by the MVC framework to instantiate the controller using
// the default forms authentication and membership providers.
public AccountController()
: this(null, null)
{
}
// This constructor is not used by the MVC framework but is instead provided for ease
// of unit testing this type. See the comments at the end of this file for more
// information.
public AccountController(IFormsAuthentication formsAuth, IMembershipService service)
{
FormsAuth = formsAuth ?? new FormsAuthenticationService();
MembershipService = service ?? new AccountMembershipService();
}
我可以更改现有的AccountController构造函数来访问我的存储库吗?
答案 0 :(得分:1)
在IoC引擎中注册服务,然后删除默认构造函数。
答案 1 :(得分:0)
如果您已使用ninject注册了存储库,则应该只需将第三个参数添加到控制器的构造函数中。我看到你之前关于ninject的评论,但我没有使用NinjectModule。如果您使用的是MVC 3,建议您查看 nuget (http://nuget.codeplex.com)并下载 Ninject.MVC3 打包将AppStartNinjectMvc3类添加到您的项目中,您可以使用kernel.Bind方法注册服务:
kernel.Bind<IThingRepository>().To<SqlThingRepository>();
希望这有帮助。
答案 2 :(得分:0)
如果你使用MVC2,你应该看看http://mvcstarter.codeplex.com/它也使用Ninject。就像@Johan所说,你只需要输入参数并将其绑定在global.asax.cs中。
希望它有所帮助!