0

我似乎无法弄清楚如何让依赖注入在自定义成员资格提供程序中工作。我知道成员资格提供程序基类在 ASP.NET 中进行了深层管理,但应该有一些方法可以让依赖注入对私有数据成员起作用。

我正在使用 Unity,仅在我的成员资格和角色提供者中看到此问题

我的问题有两个:

  1. 应用程序抱怨它没有“MyMembershipProvider”的无参数构造函数
  2. 即使我尝试这个: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...
    
        }
    
4

2 回答 2

1

它可能并不理想,但您可能需要使用属性注入而不是构造函数注入。

于 2012-06-26T22:44:15.670 回答
1

问题是您的提供者是由静态类创建的。由于静态类没有“实例化”并且在应用程序的整个生命周期内都存在,因此无法让您的 DI 框架实例化静态类。

有潜在的解决方法,但您不能使用构造函数注入。这些变通办法也很脆弱且过于复杂。简而言之,这是一个 PITA,不值得努力。通过忘记会员提供程序中的 DI,或者忘记使用 Membership 并推出自定义 IIdentity 和 IPrincipal 解决方案,您可能会为自己省去很多麻烦。

于 2012-06-26T22:52:23.667 回答