Theo dõi về việc sử dụng dependency injection cho WCF services, là có cách nào sử dụng DI cho WCF Validators, vì vậy mà người ta có thể làm điều này:Làm thế nào để tiêm một đối tượng vào một lớp WCF validator
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 - Tôi đã cố gắng áp dụng lời khuyên của Dzmitry cho phần mở rộng hành vi tùy chỉnh của tôi, vì trình duyệt tính hợp lệ của tôi được định nghĩa trong app.config. Đáng buồn là tôi nhận được một MethodMissingException, kể từ WCF muốn validator của tôi để có một constructor mặc định:
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)
Đây là lớp hành vi của tôi:
public class DependencyInjectionServiceBehavior : BehaviorExtensionElement, IServiceBehavior
{
public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
{
serviceHostBase.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = DISupport.Kernel.Get<IService>();
}
}
"Trình xác thực WCF" là gì? –
Tôi không biết phải gọi nó là gì nữa. Nếu bạn muốn tôi được cụ thể một "trình xác nhận wcf" trong trường hợp này sẽ là một triển khai tùy chỉnh của một UserNamePasswordValidator. –
John. Tại sao bạn lại tự mãn? Tôi cũng có thể như thế nếu tôi có hơn 56.000 điểm đại diện, nhưng bạn sẽ trở nên vô cùng. Những ý kiến này không chỉ từ bài viết này, mà từ những câu trả lời và chủ đề khác mà bạn đã tham gia ở đâu, trong một số trường hợp, bạn trở nên tàn bạo và có ý nghĩa. – SideFX