相关疑难解决方法(0)

UserNamePasswordValidator:当DI和Framework发生冲突时

我正在为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. 如果"否",那么在这种情况下可以使用的"最正确的"回退策略是什么?

wcf dependency-injection autofac

4
推荐指数
1
解决办法
1190
查看次数

将对象注入自定义WCF UserNamePassValidator - Autofac

我有一个托管在IIS中的服务.它由Web.config配置.

我创建了一个自定义的UserNamePassValidator,如果II在validate方法中有逻辑,它就可以工作.但我想在另一个项目中使用逻辑并使用DI注入如下.

public class UserNamePassValidator : System.IdentityModel.Selectors.UserNamePasswordValidator
{
    private readonly ISystemAuthentication _systemAuthentication;

    public UserNamePassValidator(ISystemAuthentication systemAuthentication)
    {
        _systemAuthentication = systemAuthentication;
    }

    public override void Validate(string userName, string password)
    {
        _systemAuthentication.Validate(userName, password))
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Autofac WCF集成.

var builder = new ContainerBuilder();
builder.RegisterType<AuthenticationService>().As<IAuthenticationService>();
builder.Register(c => new SystemAuthentication()).As<ISystemAuthentication>();
builder.Register(c => new UserNamePassValidator(c.Resolve<ISystemAuthentication>()));
AutofacHostFactory.Container = builder.Build();
Run Code Online (Sandbox Code Playgroud)

当我浏览到该服务时,我收到以下错误:

[MissingMethodException: No parameterless constructor defined for this object.]
Run Code Online (Sandbox Code Playgroud)

web.config行为;

 <userNameAuthentication
                 userNamePasswordValidationMode="Custom"
                 customUserNamePasswordValidatorType="MyNamespace.UserNamePassValidator, service" />
Run Code Online (Sandbox Code Playgroud)

我已阅读以下相关帖子,但示例是自托管服务: 如何将对象注入WCF验证器类

编辑

  <system.serviceModel>
    <services>
      <service behaviorConfiguration="Namespace.AuthenticationServiceBehaviour" name="Namespace.AuthenticationService" >
        <endpoint address="" binding="wsHttpBinding" contract="Namespace.IAuthenticationService" bindingConfiguration="SafeServiceConf"> …
Run Code Online (Sandbox Code Playgroud)

wcf dependency-injection autofac wcf-security

4
推荐指数
1
解决办法
1532
查看次数

标签 统计

autofac ×2

dependency-injection ×2

wcf ×2

wcf-security ×1