Ninject with MembershipProvider | RoleProvider

时间:2011-01-10 18:34:25

标签: asp.net-mvc asp.net-mvc-3 ninject

我正在使用ninject作为我的IoC,我编写了一个角色提供程序,如下所示:

public class BasicRoleProvider : RoleProvider
{
    private IAuthenticationService authenticationService;

    public BasicRoleProvider(IAuthenticationService authenticationService)
    {
        if (authenticationService == null) throw new ArgumentNullException("authenticationService");
        this.authenticationService = authenticationService;
    }

    /* Other methods here */
}

我读到在{ninject注入实例之前Provider类被实例化。我该如何解决这个问题?我目前有这个ninject代码:

Bind<RoleProvider>().To<BasicRoleProvider>().InRequestScope();

从这个答案here

If you mark your dependencies with [Inject] for your properties in your provider class, you can call kernel.Inject(MemberShip.Provider) - this will assign all dependencies to your properties.

我不明白这一点。

1 个答案:

答案 0 :(得分:9)

我相信ASP.NET框架的这个方面是非常配置驱动的。

对于你的最后一条评论,它们的含义是,不是依赖于构造函数注入(在创建组件时发生),而是可以使用setter注入,例如:

public class BasicRoleProvider : RoleProvider
{
  public BasicRoleProvider() { }

  [Inject]
  public IMyService { get; set; }
}

它会自动将您注册类型的实例注入该属性。然后,您可以从您的应用程序拨打电话:

public void Application_Start(object sender, EventArgs e)
{
  var kernel = // create kernel instance.
  kernel.Inject(Roles.Provider);
}

假设您已在配置中注册了角色提供程序。以这种方式注册提供程序仍然允许很好的模块化,因为您的提供程序实现和应用程序仍然非常分离。