0

カスタム メンバーシップ プロバイダーで依存性注入を機能させる方法がわかりません。メンバーシップ プロバイダーの基本クラスが ASP.NET の奥深くで管理されていることは承知していますが、依存関係の挿入をプライベート データ メンバーで機能させるには何らかの方法が必要です。

Unity を使用していますが、メンバーシップとロール プロバイダーでのみこの問題が発生します

私の問題は2つあります:

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

2 に答える 2

1

問題は、プロバイダーが静的クラスによって作成されていることです。静的クラスは「インスタンス化」されておらず、アプリの存続期間中存続するため、DIフレームワークが静的クラスをインスタンス化できるようにする方法はありません。

潜在的な回避策がありますが、コンストラクターインジェクションを使用することはできません。これらの回避策も脆弱で、過度に複雑です。要するに、それはPITAであり、努力する価値はありません。メンバーシッププロバイダーでDIを忘れるか、メンバーシップの使用を忘れてカスタムIIdentityおよびIPrincipalソリューションをロールすることで、多くの頭痛の種を減らすことができます。

于 2012-06-26T22:52:23.667 に答える
1

理想的ではないかもしれませんが、コンストラクター注入の代わりにプロパティ注入を使用する必要があるかもしれません。

于 2012-06-26T22:44:15.670 に答える