使用Unity在WCF中的自定义X509CertificateValidator类中进行依赖性注入

使用Unity在WCF中的自定义X509CertificateValidator类中进行依赖性注入,wcf,dependency-injection,unity-container,x509certificate,Wcf,Dependency Injection,Unity Container,X509certificate,我们正在使用WCF服务以及wsHttpBinding的基于证书的身份验证 我已经编写了自定义类来进行身份验证。此类来自System.IdentityModel.Selectors.X509CertificateValidator public class MyX509CertificateValidator : System.IdentityModel.Selectors.X509CertificateValidator { public override void

我们正在使用WCF服务以及wsHttpBinding的基于证书的身份验证

我已经编写了自定义类来进行身份验证。此类来自System.IdentityModel.Selectors.X509CertificateValidator

 public class MyX509CertificateValidator : System.IdentityModel.Selectors.X509CertificateValidator
    {


        public override void Validate(X509Certificate2 certificate)
        {
            /// Custom code goes here
        }
    }
此类在web.config中配置

 <behavior name="customBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceCredentials>
            <clientCertificate>
              <authentication certificateValidationMode="Custom"
                              customCertificateValidatorType="**SampleClass.MyX509CertificateValidator** ,SampleClass"
                              revocationMode="NoCheck"/>
            </clientCertificate>
            <serviceCertificate
              findValue="XXXXXXXXXXXXXXXX"
              x509FindType="FindByThumbprint"
              storeLocation="CurrentUser"
              storeName="My"/>
          </serviceCredentials>

我正在使用Unity.WCF nuget包向WCF添加DI支持。我的问题是我无法在上面的类中注入依赖项。这门课不需要团结。在调用WCF时,WCF运行时会自动调用它


我们真的可以在上面的类中添加依赖注入支持吗

您仍然可以将依赖项注入自定义证书验证器:

您可以通过Constructor接受它:

public class CertificateValidator : X509CertificateValidator
{
    private IMyDependency _dependency;

    public CertificateValidator(IMyDependency dependency)
    {
        _dependency = dependency;
    }

    public override void Validate(X509Certificate2 certificate)
    {
        ...
然后在配置服务主机时传递:

serviceHost.Credentials.ClientCertificate.Authentication.CustomCertificateValidator =
    new CertificateValidator(dependency);
您可以使用IOC容器向程序中创建服务主机的部分提供依赖关系