如何将对象注入到 WCF 验证器类中

2024-04-15

跟进使用依赖注入世界碳基金服务 https://stackoverflow.com/questions/881705/how-to-inject-an-object-into-a-wcf-service, 有没有办法将 DI 用于 WCF验证者,这样就可以这样做:

public class DIValidator : UserNamePasswordValidator
{
    private readonly IService service;

    [Inject]
    public DIValidator(IService service)
    {
        this.service = service;
    }

    public override void Validate(string userName, string password)
    {
        service.Login(userName, password);
    }
}

编辑 - 我尝试将 Dzmitry 的建议应用到我的自定义行为扩展中,因为我的验证器是在 app.config 中定义的。遗憾的是我得到了 MethodMissingException,因为 wcf 希望我的验证器有一个默认构造函数:

System.MissingMethodException: No default constructor has been defined for this object.

at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck)

这是我的行为课:

    public class DependencyInjectionServiceBehavior : BehaviorExtensionElement, IServiceBehavior
    {
        public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
        {
            serviceHostBase.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = DISupport.Kernel.Get<IService>();
        }
    }

一般来说,自定义验证器是以编程方式分配的(也可以从配置文件中执行此操作),就像这样,它是在服务主机打开之前完成的,基本上这也是您创建将进一步使用的 DI 容器实例的时间通过实例提供者来服务实例:

serviceHost.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = new LocalUserNamePasswordValidator();

您也可以使用 DI 容器来创建自定义验证器。

serviceHost.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = unityContainer.Resolve<UserNamePasswordValidator>();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将对象注入到 WCF 验证器类中 的相关文章

随机推荐