2011-07-19 8 views
3

私は、WCFサービスのカスタムUserNamePasswordValidatorを構築しています。私はAutofac + WCF/multitenantでサービスを結びつけています。しかし、この認証クラスを結びつける/実装するためにどのような戦略を使うべきかわかりません。UserNamePasswordValidator:DIとフレームワークが衝突するとき

理想的には、私は

public class MyValidator : UserNamePasswordValidator { 
    public MyValidator(Func<Owned<IMyUserService>> userservicefactory) { 
     ... 
    } 
} 

を開始するが、これはUserNamePasswordValidatorは、WCF(唯一のオプションは、パラメータなしのコンストラクタのように見える)によって消費される方法で厳密には不可能です。

ので、質問:

  1. は私が修正またはUserNamePasswordValidator 工場を設定することが可能ないくつかのWCFの設定ブードゥー教があるのですか?
  2. 「いいえ」の場合、このシナリオで使用できる最も「DI正しい」フォールバック戦略は何ですか?

答えて

8

スタートアップ時またはカスタムServiceHostFactory内でサービスホストをコードで構成しました。

XML構成から、私は

<userNameAuthentication 
      userNamePasswordValidationMode="Custom" 
      customUserNamePasswordValidatorType="Common.MyCustomUsernamePasswordValidator, Common"/ --> 

を削除し、私は前のホスティングに私のコンテナを設定しているので:

var auth = host.Credentials.UserNameAuthentication; 
auth.UserNamePasswordValidationMode = UserNamePasswordValidationMode.Custom; 
auth.CustomUserNamePasswordValidator = container.Resolve<Common.MyCustomUsernamePasswordValidator>(); 
1

UserNameSecurityTokenAuthenticatorを見ると、このクラスで検証を行い、UsernamepasswordValidatorをスキップすることができます。

独自のServiceCredentialsSecurityTokenManagerを実装して、認証者の作成方法を決定できます。

+0

おかげでジャック。それは私が必要とした、または旅行したいと思ったよりもウサギの穴の下にありますが、正しい方向に私を向けるために+1します。 –

関連する問題