我是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
的正确绑定是什么?
答案 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);
它工作正常。