サービススタックの流暢な検証 API フックを介して接続したカスタムバリデータ内からユーザーのAuthSessionにアクセスする最良の方法を考えていました。基本的に、要件により、「DocNumberValidator」と呼ばれるクラスを使用して、このバリデーターを介してデータベースにアクセスする必要があります。ユーザーの ID は、認証時にセッションに保存されます。この情報は、SQL クエリを正常に完了するために必要です。このセッション情報にアクセスするにはどうすればよいですか (以下を参照してください....)。IoC コンテナに AuthSession への参照がありませんか?
- 問題は、誰かが必要なセッション値を SS 検証フレームワークによって呼び出されるクラスにどのように渡すかということだと思います。
サンプルコード:
public class MyValidator : AbstractValidator<Statuses>
{
public IDocNumberValidator DocNumberValidator { get; set; }
public StatusesValidator()
{
RuleFor(s => s.DocNumber)
.Must(docNum => this.DocNumberValidator.Validate(docNum))
.WithMessage("Document Number is invalid.")
.WithErrorCode("S-001");
}
}
public class DocNumberValidator : IDocNumberValidator
{
public IDbConnectionFactory Db { get; set; }
public bool Validate(string docNum)
{
var isFound = false;
this.Db.Run(conn =>
{
var sql = "SELECT COUNT([docNumber]) FROM [TABLE] WHERE [docNumber] = @DocNum AND [UserId] = @UserID";
var cmd = conn.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
cmd.Parameters.Add(new SqlParameter("@DocNum", docNum));
cmd.Parameters.Add(new SqlParameter("@UserID", ????????)); // how does one get access to saved users session here
int cnt = (int) cmd.ExecuteScalar();
if (cnt == 1)
isFound = true;
});
return isFound;
}
}