我正在为ASP.Net MVC网站创建自定义成员资格提供程序.作为更大的库的一部分,提供程序被创建为单独的类.后端数据存储需要灵活,因为它可以是Xml文件或SQL数据库.我最初的想法是为数据存储创建一个接口,并使用依赖注入将其注入提供程序.
最终结果是开发人员可以继承数据存储接口并提供更新数据所需的方法,然后由自定义成员资格提供程序使用.
但是,由于我自己缺乏技能,我无法弄清楚如何将该类添加到网站时将其注入会员提供商?将数据存储链接到提供程序需要做些什么?在网站上启用此功能的最简单方法是什么?
asp.net-mvc dependency-injection data-storage membership-provider
我是NInject绑定的新手,这是NInject描述的内容.
如果我想将MembershipProvider绑定到SqlMembershipProvider,我应该使用SingletonBehavior,因为我只需要一个sql成员资格提供程序吗?
我有一个自定义MembershipProvider类,它继承自MembershipProvider,它带有两个参数:
public class CustomMembershipProvider : MembershipProvider
{
private readonly ISecurityRepository _securityRepository;
private readonly IUserRepository _userRepository;
public CustomMembershipProvider(ISecurityRepository securityRepository, IUserRepository userRepository)
{
...
}
public override MembershipUser GetUser(string username, bool userIsOnline)
{
...
}
... etc
}
Run Code Online (Sandbox Code Playgroud)
这个配置文件看起来类似于:
<membership defaultProvider="CustomMembershipProvider">
<providers>
<clear />
<add name="CustomMembershipProvider" type="Library.Membership.CustomMembershipProvider" />
</providers>
</membership>
Run Code Online (Sandbox Code Playgroud)
这在我的Web应用程序中主要用于登录和注销.我正在使用Unity for DI并在我的Boostrapper.cs类中设置必要的类.
但是,当我想创建一个自定义User类并调用Membership.GetUser方法时,我最近遇到了一个问题.当我这样做时,我得到以下异常:
{"No parameterless constructor defined for this object. (C:\\*app path*\\web.config line 43)"}
Run Code Online (Sandbox Code Playgroud)
我的配置文件中的第43行指向我上面发布的自定义成员资格提供程序.我认为在其他地方,应用程序使用Unity来解析这些参数,但是在使用Membership类时却没有.
有什么办法可以告诉应用程序如何解决这些依赖关系,或者如果没有办法在不使用具体实现的情况下将这些依赖关系添加到我的成员资格提供程序中?
编辑1:
这是自定义User类:
public class User : MembershipUser
{
public int UserId { get; …Run Code Online (Sandbox Code Playgroud) c# asp.net-mvc dependency-injection asp.net-membership unity-container