我似乎无法弄清楚如何让依赖注入在自定义成员资格提供程序中工作。我知道成员资格提供程序基类是在ASP.NET中深入管理的,但应该有一些方法可以让依赖注入工作在私有数据成员上。
我使用Unity并仅在我的会员和角色提供商中看到此问题
我的问题有两个方面:
即使我尝试这个:https://stackoverflow.com/a/9815425/595335,ValidateUser方法中的安全服务为空
public class MyMembershipProvider : MembershipProvider
{
public ISecurityService securityService;
public MyMembershipProvider(ISecurityService securityService)
{
this.securityService = new SecurityService();
}
public override bool ValidateUser(string username, string password)
{
User user = securityService.GetUserByUsername(username);
...ommited...
}
答案 0 :(得分:1)
它可能不太理想,但您可能需要使用属性注入而不是构造函数注入。
答案 1 :(得分:1)
问题是您的提供程序是由静态类创建的。由于静态类没有“实例化”并且在应用程序的生命周期中存在,因此无法让DI框架实例化静态类。
有潜在的解决方法,但您不能使用构造函数注入。这些变通方法也很脆弱且过于复杂。简而言之,它是一个PITA而且不值得努力。你可能会在会员提供商中忘记关于DI,或忘记使用会员资格并推出自定义IIdentity和IPrincipal解决方案,从而为自己省去了很多麻烦。