UserNamePasswordValidator:当DI和Framework发生冲突时

Mar*_* L. 4 wcf dependency-injection autofac

我正在为WCF服务构建自定义UserNamePasswordValidator.我正在使用Autofac + WCF/multitenant连接服务,所有这些都整齐地安装在一起.但是,我不确定使用什么策略来连接/实现此身份验证类.

理想情况下,我会开始

public class MyValidator : UserNamePasswordValidator {
    public MyValidator(Func<Owned<IMyUserService>> userservicefactory) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这并不是严格可行的,因为WCF使用UserNamePasswordValidator的方式(唯一的选项似乎是无参数构造函数).

所以,问题:

  1. 我是正确的还是有一些WCF配置伏都教用户可以配置UserNamePasswordValidator 工厂
  2. 如果"否",那么在这种情况下可以使用的"最正确的"回退策略是什么?

Mar*_* L. 9

我在启动时或在自定义ServiceHostFactory中的代码中配置了服务主机.

从XML配置中,我删除了

<userNameAuthentication 
          userNamePasswordValidationMode="Custom"
          customUserNamePasswordValidatorType="Common.MyCustomUsernamePasswordValidator, Common"/ -->
Run Code Online (Sandbox Code Playgroud)

因为我在托管之前配置了我的容器:

var auth = host.Credentials.UserNameAuthentication;
auth.UserNamePasswordValidationMode = UserNamePasswordValidationMode.Custom;
auth.CustomUserNamePasswordValidator = container.Resolve<Common.MyCustomUsernamePasswordValidator>();
Run Code Online (Sandbox Code Playgroud)