gpt4 book ai didi

.net - 如何将对象注入(inject) WCF 验证器类

转载 作者:行者123 更新时间:2023-12-04 02:21:58 27 4
gpt4 key购买 nike

跟进对 WCF services 使用依赖注入(inject),是否有任何方法可以将 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>();

关于.net - 如何将对象注入(inject) WCF 验证器类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1176288/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com