使用Ninject和Membership.Provider

lan*_*der 12 asp.net-mvc ninject asp.net-mvc-3

我是Ninject的新手,我在使用自定义会员提供商时遇到问题.

我的会员提供者传入了一个存储库接口.它看起来像:

public class CustomMembershipProvider : MembershipProvider
{
  public CustomMembershipProvider( IRepository repository )
  {
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用MVC应用程序中部分帐户模型的代码作为起点.

但是当它打电话时Membership.Provider我得到一个错误说No parameterless constructor defined for this object.

我已经在ninject中设置了绑定来绑定一个类,IRepository这个Repository类在我在控制器中测试它时起作用.

Ninject中用于什么是正确的绑定Membership.Provider

mar*_*are 10

这就是今天应该如何使用MVC和Ninject(版本3)的新版本:

您可以访问DependencyResolver实例,Ninject将自己设置为当前的DependencyResolver.这样你就不需要黑客来访问静态Ninject内核了.请注意,我的示例使用我自己的IUserService存储库来存在...

IUserService _userService = DependencyResolver.Current.GetService<IUserService>();
Run Code Online (Sandbox Code Playgroud)


lan*_*der 9

我找到的最佳解决方案如下:

private IRepository _repository;

[Inject]
public IRepository Repository
{
    get { return _repository; }
    set { _repository= value; }
}

public CustomMembershipProvider()
{
    NinjectHelper.Kernel.Inject(this);
}
Run Code Online (Sandbox Code Playgroud)

NinjectHelper是一个从中获取Kernal的静态助手类.

  • 什么是NinjectHelper?我找不到它.我需要自己创建吗? (4认同)

Ian*_*vis 5

由于Membership.Provider在Ninject可以实例化它们之前创建了成员资格集合和实例,因此您需要对该对象执行创建后激活.如果[Inject]在提供程序类中为属性标记依赖项,则可以调用kernel.Inject(Membership.Provider)- 这将为属性分配所有依赖项.