跟进使用依赖注入世界碳基金服务 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>();
}
}