2012-06-26 3 views
0

사용자 지정 멤버 자격 공급자에서 작동하도록 종속성 주입을 얻는 방법을 알아낼 수 없습니다. 멤버쉽 공급자 기본 클래스는 ASP.NET에서 깊이 관리되지만 개인 데이터 멤버에서 작동하도록 종속성 주입을 얻는 방법이 있어야한다는 것을 알고 있습니다. 내가 유니티를 사용하고 단지 내 회원 및 역할 공급자에서이 문제를 볼 수있어Unity 사용자 지정 멤버 종속성이 작동하지 않습니다.

내 문제는 두 배입니다 :

    응용 프로그램은 그것의 매개 변수가 생성자가없는 것을 불평
  1. "MyMembershipProvider"
  2. 나는이 시도하는 경우에도 : https://stackoverflow.com/a/9815425/595335가, 보안 서비스는 ValidateUser 방법의 null

    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... 
    
        } 
    

답변

1

이상적인 것은 아니지만 생성자 주입 대신 속성 주입을 사용해야 할 수도 있습니다.

1

문제는 공급자가 정적 클래스에 의해 생성된다는 것입니다. 정적 클래스는 "인스턴스화"되지 않고 앱 수명 동안 살아 있기 때문에 DI 프레임 워크가 정적 클래스를 인스턴스화하는 것을 허용 할 방법이 없습니다.

잠재적 인 해결 방법이 있지만 생성자 삽입을 사용할 수 없습니다. 이러한 대안은 또한 부서지기 쉽고 지나치게 복잡합니다. 간단히 말해서, 그것은 PITA이고 단지 노력할만한 가치가 없습니다. 당신은 아마도 회원 공급자의 DI를 잊어 버리거나 Membership을 잊어 버리고 커스텀 IIdentity와 IPrincipal 솔루션을 사용함으로써 많은 두통을 덜어 낼 수있을 것입니다.

관련 문제