通过构造函数访问AccountController中的存储库

时间:2011-03-04 16:21:03

标签: c# asp.net-mvc constructor controller

我正在使用实现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构造函数来访问我的存储库吗?

3 个答案:

答案 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中。

希望它有所帮助!