Jak wstrzyknąć obiekt do klasy walidatora WCF
Kontynuacja korzystania z wtrysku zależności dlaUsługi WCF, czy jest jakiś sposób używania DI dla WCFwalidatory, aby można było to zrobić:
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);
}
}
EDIT - Próbowałem zastosować poradę Dzmitry'ego do mojego niestandardowego rozszerzenia zachowania, ponieważ mój walidator jest zdefiniowany w app.config. Niestety otrzymuję wyjątek MethodMissingException, ponieważ wcf chce, aby mój walidator miał domyślny konstruktor:
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)
Oto moja klasa zachowania:
public class DependencyInjectionServiceBehavior : BehaviorExtensionElement, IServiceBehavior
{
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
serviceHostBase.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = DISupport.Kernel.Get<IService>();
}
}