使用Ninject和Membership.Provider

时间:2010-11-08 10:40:40

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

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

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

public class CustomMembershipProvider : MembershipProvider
{
  public CustomMembershipProvider( IRepository repository )
  {
  }
}

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

但是当它调用Membership.Provider时,我收到错误No parameterless constructor defined for this object

我已经在ninject中设置了绑定,以将IRepository绑定到Repository类,这就像我在控制器中测试它一样。

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

4 个答案:

答案 0 :(得分:10)

今天应该如何使用MVC和Ninject(版本3)的新版本来完成它:

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

IUserService _userService = DependencyResolver.Current.GetService<IUserService>();

答案 1 :(得分:9)

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

private IRepository _repository;

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

public CustomMembershipProvider()
{
    NinjectHelper.Kernel.Inject(this);
}

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

答案 2 :(得分:5)

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

答案 3 :(得分:0)

我从未使用过Ninject。 但是在StructureMap中我设置了这个依赖:

expression.For<MembershipProvider>().Add(System.Web.Security.Membership.Provider);

它工作正常。